如何在AIR本机扩展中使用FRESetContextNativeData()?(How do I use FRESetContextNativeData() in AIR native extensi

编程入门 行业动态 更新时间:2024-10-27 10:18:05
如何在AIR本机扩展中使用FRESetContextNativeData()?(How do I use FRESetContextNativeData() in AIR native extensions?)

我正在建立一个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); }

更多推荐

本文发布于:2023-07-29 14:05:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1316723.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:本机   如何在   AIR   extensions   FRESetContextNativeData

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!