次のC++およびActionScript3コードでは、getBytes2
メソッドが呼び出されるとAIRアプリケーションがクラッシュします。なぜこうなった?ソリューションの提案は高く評価されます。可変長のByteArraysをC++でAIRネイティブ拡張用に作成する
C++コード:
FREObject getBytes2(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
FREByteArray actualBytes;
FREAcquireByteArray(argv[0], &actualBytes);
uint8_t* nativeString = (uint8_t*) "Hello World from C++";
memcpy(actualBytes.bytes, nativeString, sizeof(nativeString));
FREReleaseByteArray(&actualBytes);
FRENewObjectFromBool(1, &result);
return result;
}
ActionScript3コード:
public function getBytes2():ByteArray {
var ba:ByteArray = new ByteArray();
this._ExtensionContext.call("getBytes2", ba);
ba.position = 0;
return ba;
}
エラーが発生しないため、AIRデバッガは約1秒後にフリーズします。ネイティブエクステンションとサンプルAIRアプリケーションのAS3側では、私はFlash Builder 4.6を使用しています。私はVS2010を使用しているC + +の側については。私はデバッガを接続することができます。私は使用しているコードがas3-arduinoコネクタで使用したコードとほとんど同じであるため、なぜこれが発生するのだろうかと疑問に思っています... –
エラーは本当にmemcpy関数によるもので、入力bytearrayが小さい結果として得られるbytearrayよりも、しかし、そのロジックas3-arduinoコネクタもクラッシュするだろう... –