我有一个用本地C++编写的DLL。 Visual Studio项目名称为MyDll
,它编译为输出目录中名为MyDll.dll
的文件。重命名DLL会导致使用它的代码崩溃
编译后,我将它重命名为MyDll2.dll
。 (这个例子看起来很愚蠢,但我有一个很好的重命名的理由。)
用C++/CLI编写的第二个项目使用这个DLL。
在编译时,此项目引用MyDll.lib
(在编译MyDll时生成),以便能够使用dll中定义的类。
在运行时,要加载DLL,我调用LoadLibrary,并将文件C:\...\MyDll2.dll
(它实际上在同一个文件夹中)的完整路径传递给它。它成功加载,如LoadLibrary的返回值所示。
在我使用DLL中定义的类的代码中第一次出现(只是在栈中声明一个对象)时,它崩溃了SEHException
(这些例外没有提供有关崩溃原因的任何信息...... )
这只会发生,如果我做了重命名的一步。如果我将它保留为MyDll.dll
并在该文件上调用LoadLibrary,则一切正常。所以这显然是由于重命名。
任何想法为什么?我不允许重命名DLL吗?
(编辑:通过提供更多的细节澄清)
您的应用程序是否具有该DLL的句柄(使用Procexp来说明)? – Benoit 2010-12-09 11:00:59