Win7上的LoadLibrary问题(64位)

时间:2010-12-13 12:30:57

标签: c++

我使用vs2005开发了MFC Regular DLL“Static Linked”。当它编译为32位DLL

我可以使用“LoadLibrary”从我的机器或任何其他机器加载它。

但是当它编译为64位DLL时,我只能从我的机器上加载它。

我查看了我的代码并发现了声明的全局对象。

MyClass myObj;

当我评论这个对象时..我可以加载DLL并从不同的机器中使用它。但是当任何

找到全局对象...我无法从diffrenet机器加载我的DLL。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

  

当我尝试使用“GetLastError”时,它返回的数字如“-529697949”

错误代码为0xe06d7363,最后3个十六进制数字拼写为“MSC”。这是Microsoft编译器中C ++异常的异常代码。

你的代码正在轰炸一个未被捕获的C ++异常,可能是在DllMain()中引发的。如果你不能从这个提示中对它进行逆向工程,你需要一个调试器。

答案 1 :(得分:0)

目标计算机是否安装了64位Visual C ++ 2005 redistibutable?他们可能从其他应用程序安装了32位版本,但从未安装过64位版本?

请参阅http://www.microsoft.com/downloads/en/details.aspx?FamilyID=90548130-4468-4bbc-9673-d6acabd5d13b

答案 2 :(得分:0)

在创建/分配/初始化dll的全局/静态对象(它是DllMain的一部分)时,也可以抛出未捕获的C ++异常。所以很有可能在代码中的某个地方有一个有效的throw语句负责这种行为(而不是某些编译器/架构/平台错误;也许它只是一个特定于x64的定义?)。

找到那个讨厌的小*#!!:

  • 使用调试信息(/ DEBUG)编译所有代码
  • 打开符号服务器(调试/选项/调试/符号/符号文件(.pdb)位置:[x] Microsoft符号服务器)
  • 在" Thrown"列中启用所有Break of Exceptions(调试/例外... /勾选所有[])
  • 开始调试,您最终会找到正确的位置。

由于缺少强制执行"抛出"例如声明在Java中(在c ++中它是可选的并且相当无用;参见Throw keyword in function's signature),try / catch / throw系统几乎不可用于创建健壮且可维护的代码;它几乎就像随处可见隐藏的那样。