如何在Air Native Extension中使用外部的Dll?

问题描述:

我ANE文件的结构如下:如何在Air Native Extension中使用外部的Dll?

<META-INF> 
    <ANE> 
     <Windows-x86> 
      ExtensionDll.dll 
      DllUsedByExtensionDll.dll 
     extension.xml 
mimetype 
catalog.xml 
library.swf 

如果ExtensionDll.dll使用在其他DLL中的函数,扩展不会加载。 DllMain不被调用。 DllUsedByExtensionDll.dll在空气应用程序使用扩展程序运行时似乎不在Dll搜索路径中。

我应该如何让应用程序找到额外的Dll,如果我不想将它们放到一些常见的Dll路径中?

如果你的dll正在使用其他dll,那么在要使用该ANE文件的项目中包含参考dll。

+0

嗯......如何包含它们? – BlueWanderer 2012-04-17 13:58:29

我已经有同样的问题,并在这几天。原来有两种方法可以解决这个问题。

  1. 导出发布构建,同时确保DllUsedByExtensionDll.dll与您的可执行文件打包在同一目录中。
  2. 出于调试目的,将DllUsedByExtensionDll.dll复制到您的Adobe AIR SDK bin目录中,其中Air Debug Launcher (adl)可执行文件位于该目录中。

您不需要在您正在构建的ANE中打包DllUsedByExtensionDll.dll。

问题是由于调试器的可执行文件位于AIR SDK中,ExtensionDll.dll在从调试器启动时无法找到DllUsedByExtensionDll.dll。然而,一旦你导出发布版本,你的应用程序就是可执行文件,所以现在它在它的根目录下查找这个dll。

如果你想调试这个以便找到更多关于可能出错的信息,我建议你使用adl命令通过命令行运行你的应用程序。

对于我来说,运行Flash Builder的调试/运行意味着我看不到Windows错误“该程序无法启动,因为您的计算机缺少dll”。这导致我在很长一段时间内疯狂追逐。

+1

而不是复制,你可以在你的'%PATH%'中包含包含dll的目录。看例如我的[运行脚本](https://github.com/Ventero/FRESteamWorks/blob/master/test/bin-debug/runWin.bat)。不知道在Flash Builder中是否可能。 – Ventero 2013-03-07 21:58:05