在 AIR 本机扩展中包含库会导致错误,"The extension context does not have a method with the name..."适用于所有方法

Including library in AIR Native Extension causes the error, "The extension context does not have a method with the name..." for all methods

本文关键字:have not method does with 有方法 适用于 name the context The      更新时间:2023-10-16

我正在为Windows桌面开发AIR本机扩展(ANE)。 此扩展的要点是能够调用第三方 C 库,该库由两个定义方法签名/typedefs 的 .h 文件和一个 .lib 文件组成。

在将第三方库包含在项目之前,我首先通过在 dll 中使用简单的"sayHello"函数构建 ANE 来确认我正确设置了所有内容,该函数只是创建并返回一个字符串。

在验证我可以从我的 AIR 应用程序调用 sayHello 并获得响应后,我继续添加一个初始化第三方库的函数。这就是事情横盘整理的地方。 我的dll编译得很好,我能够打包ANE而不会出错,但是当我尝试从AIR调用任何ANE函数时,我收到以下错误:

"The extension context does not have a method with the name..."

在 AIR 中,对 createExtensionContext() 的调用成功并返回一个 ExtensionContext 对象,但我无法调用任何本机函数。 更重要的是,Visual Studio 的调试器不再为我的 dll 加载符号 - dll 不会出现在模块窗口中,我无法在本机代码中设置断点。

如果我注释掉调用第三方库初始化函数的行,那么一切再次正常工作 - 我可以调用我的所有函数并在 Visual Studio 中命中断点。

所以基本上,如果我将此库编译到我的 dll 中,那么 AIR 将无法加载它。 什么原因可能导致这种情况?

使用 ProcessMonitor,我发现第三方库依赖于外部 dll,但它没有找到。 在创建 ExtensionContext 时,运行时显然会尝试解析 ANE 的依赖关系。 由于找不到此 dll,因此 ANE 的初始值设定项函数失败。 在这种情况下,AIR 仍会创建一个 ExtensionContext 对象,但由于该对象从未成功初始化,因此它不知道其函数的名称和位置。

相关文章: