2015-06-19 50 views
1

我正在使用Windows桌面的AIR本機擴展(ANE)。這個擴展的意義在於能夠調用第三方C庫,該庫包含兩個定義方法簽名/ typedefs的.h文件和一個.lib文件。在AIR本機擴展中包含庫會導致錯誤「擴展上下文沒有名稱的方法」,適用於所有方法

在將第三方庫包含到項目中之前,我首先確認了通過在只創建並返回字符串的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將無法加載它。什麼會造成這種情況?

回答

0

使用ProcessMonitor,我發現第三方庫對外部DLL沒有依賴,它沒有找到。在創建ExtensionContext時,運行時顯然試圖解決ANE的依賴關係。由於它找不到這個DLL,ANE的初始化函數失敗了。在這種情況下,AIR仍然會創建一個ExtensionContext對象,但由於它從未成功初始化,因此它不知道其函數的名稱和位置。

相關問題