c++ - 通过 LoadLibrary 从纯 C++ 程序加载托管 C++ DLL

标签 c++ dll loadlibrary

我正在尝试在托管 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.dllloader.exe。尝试运行 loader.exe 时,我总是得到返回代码“1”。查看 GetLastError() 产生的错误代码显示加载 dllcode.dll 失败,因为 找不到指定的模块。

有人知道为什么会这样吗?它是否与需要嵌入到 dllcode.dll 中的 list 有关?我在 dllcode.dll 上运行依赖程序,但据我所知它没有产生任何问题。

最佳答案

我刚刚发现为什么无法从我的普通 C++ 程序加载托管 C++ DLL。再次感谢 jdigital 为我提供了一个有用的工具:

错误的来源是没有找到MSVC8运行时库。我认为通过

构建时生成的 list
cl /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/

相关文章:

c++ - #define 代码行到别的东西

c++ - 具有基类型的派生类型的 Luabind 设置属性

python - rpy2 加载库失败

android - UnsatisfiedLinkError nativeLibraryDirectories=[/vendor/lib64,/system/lib64

c# - FMOD,每秒节拍

c++ - <函数样式转换> 错误 : Cannot convert from 'initializer list' to 'std::thread'

powershell - Powershell加载什么版本的dll文件?

c++ - 如何使用 MinGW 将符号正确导出到 Windows DLL 中?

c++ - 创建全局键盘钩子(Hook)

c++ - LoadLibraryEx 忽略并排 list