我试图在Managed C ++和普通C ++之间进行简单的混合。我正在使用Visual Studio 2005,但仍然遇到问题。这是我的设置。
首先,我有一个从代码构建的简单DLL
#using "mscorlib.dll"
#include "windows.h"
__declspec(dllexport)
void sayHello()
{
OutputDebugStringA( "Hello from managed code!" );
}
我使用
在命令行上将其编译为DLLcl /CLR /LD dllcode.cpp
接下来,我有一个简单的程序,只包含
#include <windows.h>
int main()
{
HINSTANCE lib = LoadLibrary( "dllcode.dll" );
if ( !lib ) {
return 1;
}
return 0;
}
我使用
构建了一个应用程序cl loader.cpp
所以我最终在同一目录中使用dllcode.dll
和loader.exe
。尝试运行loader.exe
时,我总是得到返回代码'1'。查找由GetLastError()
产生的错误代码,表明因dllcode.dll
The specified module could not be found.
失败
有人知道为什么会这样吗?它是否与需要嵌入dllcode.dll
左右的清单有关?我在dllcode.dll上运行了依赖程序,但就我所知,它没有产生任何问题。
答案 0 :(得分:3)
我刚刚发现为什么从我的vanilla C ++程序加载Managed C ++ DLL不起作用。再次感谢jdigital为我指出了一个有用的工具:
错误的来源是找不到MSVC8运行时库。我认为通过
建立时产生的清单cl /CLR /LD dllcode.cpp
已经嵌入到DLL中。显然,它不是 - 所以加载器找不到合适的MSVCR80.dll副本。
我通过向DLL构建例程添加第二步来修复此问题:
cl /CLR /LD dllcode.cpp
mt -manifest dllcode.dll.manifest -outputresource:dllcode.dll;2
希望这会有所帮助。我怀疑是一个初学者问题......
答案 1 :(得分:0)
您可以尝试使用filemon查看LoadLibrary正在尝试加载的内容。