我正在建立一个ANE。 在我对本机代码的一次调用中,有一个对象被创建,并且我希望能够将其保留在内存中以便在将来的调用中引用。
我以为我可以通过创建指向对象的指针,然后将该指针传递给FRESetContextNativeData()来实现这一点,如下例所示:
FREObject storeData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data = "testing..."; FRESetContextNativeData( ctx, &data ); return getFREString(data); } FREObject retrieveData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data; FREGetContextNativeData(ctx, (void**)&data); return getFREString(data); }但这似乎不起作用。 在retrieveData()的末尾, data指向一堆随机性。 是什么赋予了?
I'm building an ANE. In one of my calls into native code, there's an object that gets created, and I'd like to be able to keep that in memory to reference in a future call.
I thought I could could do this by creating a pointer to the object, and then passing that pointer to FRESetContextNativeData() as in the example below:
FREObject storeData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data = "testing..."; FRESetContextNativeData( ctx, &data ); return getFREString(data); } FREObject retrieveData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data; FREGetContextNativeData(ctx, (void**)&data); return getFREString(data); }This doesn't seem to work however. At the end of retrieveData(), data points to a bunch of randomness. What gives?
最满意答案
所以我有点白痴。 我犯的错误是在调用FRESetContextNativeData()时将data放入&之前。 那个只需要一个指针,而不是指向像FREGetContextNativeData()这样的指针。
以下代码生成我期望的结果:
FREObject storeData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data = "testing..." FRESetContextNativeData( ctx, (void*)data ); return getFREString(data); } FREObject retrieveData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char *data; FREGetContextNativeData(ctx, (void**)&data); return getFREString(data); }So I'm a bit of an idiot. The mistake I made was putting & before data in my call to FRESetContextNativeData(). That one just needs a pointer, not a pointer to a pointer like FREGetContextNativeData().
The following code produces the results I was expecting:
FREObject storeData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char* data = "testing..." FRESetContextNativeData( ctx, (void*)data ); return getFREString(data); } FREObject retrieveData(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { char *data; FREGetContextNativeData(ctx, (void**)&data); return getFREString(data); }更多推荐
发布评论