我正在尝试在托管 C++ 和普通 C++ 之间建立一个简单的组合。我正在使用 Visual Studio 2005,但一直遇到问题。这是我的设置。
首先,我有一个从代码构建的简单 DLL
#using "mscorlib.dll"
#include "windows.h"
__declspec(dllexport)
void sayHello()
{
OutputDebugStringA( "Hello from managed code!" );
}
我使用命令行将其编译为 DLL
cl /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
失败,因为 找不到指定的模块。
有人知道为什么会这样吗?它是否与需要嵌入到 dllcode.dll
中的 list 有关?我在 dllcode.dll 上运行依赖程序,但据我所知它没有产生任何问题。
最佳答案
我刚刚发现为什么无法从我的普通 C++ 程序加载托管 C++ DLL。再次感谢 jdigital 为我提供了一个有用的工具:
错误的来源是没有找到MSVC8运行时库。我认为通过
构建时生成的 listcl /CLR /LD dllcode.cpp
已经嵌入到 DLL 中。显然,它不是 - 所以加载程序无法找到适当的 MSVCR80.dll 拷贝。
我通过向 DLL 构建例程添加第二步解决了这个问题:
cl /CLR /LD dllcode.cpp
mt -manifest dllcode.dll.manifest -outputresource:dllcode.dll;2
希望这对您有所帮助。相当新手的问题,我怀疑...
关于c++ - 通过 LoadLibrary 从纯 C++ 程序加载托管 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757298/