原生x64 dll不起作用

时间:2012-02-25 20:35:20

标签: windows visual-c++

我有一个应用程序,我编译为x86代码,但作为单独的版本,也作为x64代码。该应用程序基本上有两个部分,一个是c#managed exe和一个c ++ unmanaged dll。我对后者有疑问。在我的开发PC(Windows 7 64位,Visual Studio 2008)上,我创建了一个带有部署项目的设置,此安装程序将应用程序安装在Program Files中......应该运行并运行应用程序。我也有一台测试PC(Windows 7 64位,几乎没有别的)。应用程序仍然安装到Program Files ...但它没有运行,当调用非托管dll的函数(任何函数)时,我得到BadImageFormatException。问题是我自己的生成dll的项目也使用了相当多的免费库(例如glew32,openal,freeimage等)。我尽可能小心地确保使用这些库的x64版本图书馆,但仍然有些错误。出于某种原因,我的dll使用的库之一在测试PC上不能作为x64代码使用,但它位于开发PC上。至少这是我目前唯一的解释,为什么我的设置在开发PC上工作,而不是在测试PC上。 我的问题是:我怎样才能找出问题所在。我收到的错误消息并没有说明任何有用的细节。我试着用依赖分析我的dll,但它看起来还不错。它列出了许多依赖库作为X86(这些可能是系统文件),但我有意使用的所有库都列为x64。 有没有办法测试为什么我的测试PC上的Windows试图将DLL作为x86代码运行,即使它应该是x64? 感谢。

我注意到一些非常奇怪的事情:我的应用程序部署在Program Files文件夹中,因为它应该用于x64应用程序,但它无法运行。但是,如果我将其安装的文件夹中的所有文件复制到另一个文件夹(在Documents文件夹中),则应用程序运行完美。

3 个答案:

答案 0 :(得分:0)

在要诊断问题的计算机中运行Fusion Log Viewer。仔细查看日志,您将确切地看到正在加载哪些dll,以及从哪里开始。

答案 1 :(得分:0)

您已使用Any CPU配置构建.NET可执行文件(或DLL),并且已为Win32 / x64提供了x64 / Win32本机DLL(即错误的配置)。

  • 在x64系统上,您的.NET二进制文件将尝试加载本机DLL,就像本机DLL是x64一样。
  • 在32位系统上,它将尝试加载32位本机DLL。

答案 2 :(得分:0)

我找到了答案。问题不在于64位dll。我没有制作的其中一个库但我链接到(我还不知道哪个,那里)似乎试图将文件写入应用程序文件夹。当然,除非您以管理员身份运行应用程序,否则不允许在Program Files文件夹中进行此操作。很抱歉找错了问题的帮助。