对于以下C ++和ActionScript3代码,我的AIR应用程序在调用getBytes2
方法时崩溃。为什么会这样?解决方案建议将不胜感激。
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;
}
答案 0 :(得分:1)
有关动态设置长度的工作示例,请参阅FREImageProcessor.cpp。基本上,您可以像在ActionScript中一样设置长度。
FREObject length;
FRENewObjectFromUint32(sizeof(nativeString), &length);
FRESetObjectProperty(argv[0], (const uint8_t*) "length", length, NULL);
答案 1 :(得分:0)
您是否收到任何特定错误或崩溃消息?您使用的是哪个IDE - 是否可以在该进程上附加调试器?我会把钱花在memcpy函数中的崩溃上......
我唯一的但是当你发送字符串时,你没有将空终结符从字符串复制到你的BA。我不认为这应该是重要的(您可能会遇到在AS3端提取数据,但这不应该导致问题)。
答案 2 :(得分:0)
实际上有些人在获取byteArrays时会报告类似的问题。我有一个kludgy修复我尚未在ArduinoConnector代码中发布它。几乎涉及在AS3端播种4096字节byteArray并发送它。我还尝试在c侧创建一个具有类似结果的新byteArray。根据AIR工程师的说法,我们不应该有这个问题,但我不知道他们是否考虑了memcpy函数的工作原理。