パブリックドメインとして公開するFlash用のCrypto ++のAIRネイティブ拡張を開発しています。私は、SHA-256を使ってハッシュをテストするいくつかのコードから始めましたが、なんらかの理由で、Flashコンパイラは利用可能なメソッドを認識しません(拡張コンテキストにはメソッドがありませんここでは、完全なC++コードですCrypto ++でアプリケーションのエラーが発生する
:名前はのisSupportedで)。
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で書いているのであれば、なぜFlashコードではなくC++コードを含めるべきですか?なぜあなたは "フラッシュ"の代わりに "C++"というタグを付けましたか? –
AIR Native Extensionです。私は引用: 'Adobe AIRのネイティブ拡張は、ActionScriptクラスと組み込みActionScriptクラスでは利用できないデバイス固有のライブラリや機能に簡単にアクセスできるネイティブコードの組み合わせです。この場合、C++のパフォーマンスはActionScriptよりもはるかに高いので、私はCrypto ++ ANEを記述しようとしています。この質問にはC++コードがあります。 –