我正在開發一個我將作爲公共域發佈的Crypto ++ for Flash的AIR本機擴展。我開始使用一些代碼來測試哈希(在這種情況下使用SHA-256),但由於某些原因CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);
(如消除過程所發現的)導致Flash編譯器無法識別任何可用的方法(擴展上下文沒有方法名爲則isSupported):Crypto ++導致應用程序失敗
下面是完整的C++代碼:
FREObject isSupported(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
uint32_t isSupportedSwitch = 1;
FRENewObjectFromBool(isSupportedSwitch, &result);
return result;
}
FREObject computeHash(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
FREByteArray actualBytes;
FREAcquireByteArray(argv[0], &actualBytes);
byte const* pbData = (byte*) actualBytes.bytes;
unsigned int nDataLen = strlen((const char*) pbData);
byte abDigest[CryptoPP::SHA256::DIGESTSIZE];
CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);
memcpy(actualBytes.bytes, (uint8_t*) abDigest, 32);
FREReleaseByteArray(argv[0]);
FRENewObjectFromBool(1, &result);
return result;
}
void testContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
{
*numFunctions = 2;
FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));
func[0].name = (const uint8_t*) "isSupported";
func[0].functionData = NULL;
func[0].function = &isSupported;
func[1].name = (const uint8_t*) "computeHash";
func[1].functionData = NULL;
func[1].function = &computeHash;
*functions = func;
}
void testContextFinalizer(FREContext ctx)
{
return;
}
void testInitializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
{
*ctxInitializer = &testContextInitializer;
*ctxFinalizer = &testContextFinalizer;
}
void testFinalizer(void* extData)
{
return;
}
任何幫助,在此將深表讚賞,並會幫助我在這個項目很長的路要走。
編輯:爲了澄清,我問爲什麼CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);
導致上述應用程序失敗和可能的方法來解決它。
如果你在Flash中寫這個,爲什麼包含C++代碼而不是Flash代碼?爲什麼你將它標記爲「C++」而不是「flash」? –
這是一個AIR本機擴展。我引用:'Adobe AIR的本機擴展是ActionScript類和本機代碼的組合,可以輕鬆訪問設備特定的庫和功能,這些功能在內置的ActionScript類中不可用。在這種情況下,我試圖編寫Crypto ++ ANE,因爲C++的性能比ActionScript要高得多。你在問題中看到的是C++代碼。 –