我使用vs2005开发了MFC Regular DLL“Static Linked”。当它编译为32位DLL
时我可以使用“LoadLibrary”从我的机器或任何其他机器加载它。
但是当它编译为64位DLL时,我只能从我的机器上加载它。
我查看了我的代码并发现了声明的全局对象。
MyClass myObj;
当我评论这个对象时..我可以加载DLL并从不同的机器中使用它。但是当任何
时找到全局对象...我无法从diffrenet机器加载我的DLL。
任何人都可以帮助我吗?
答案 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的定义?)。
找到那个讨厌的小*#!!:
由于缺少强制执行"抛出"例如声明在Java中(在c ++中它是可选的并且相当无用;参见Throw keyword in function's signature),try / catch / throw系统几乎不可用于创建健壮且可维护的代码;它几乎就像随处可见隐藏的那样。