1

我有一个导出到 Win32 Dll 的本机 C++ 类:

class __declspec(dllexport) Manager { ... }

Dll 创建成功。让我们称之为Unmanaged.dll

我想在.Net 应用程序中使用这个类。因此,我决定创建托管 C++ 包装类。所以我创建了一个新的 CLR 类库,在其中设置Unmanaged.dll为链接器的输入。

编译托管 dll 时出现以下错误:

致命错误 LNK1107:文件无效或损坏:无法在 0x318 读取。(项目ManagedBridge中的Unmanaged.dll)

这两个项目都设置为编译为 x64。DLL 导出查看器显示类的构造函数和方法。所以DLL似乎很好。

有什么我想念的吗?

4

1 回答 1

2

您不能将 DLL 传递给链接器,它不知道如何处理它。DLL 通常不适合帮助链接器确定 DLL 是否包含您调用的函数。从 DLL 导出可以是多个名称。它是一个数字(“序数”)是一个问题,链接器将不知道如何将数字映射到标识符名称。并且名称也不必匹配,名称通常会简化,并删除名称装饰。

您必须改为告诉链接器有关 DLL 的导入库的信息。其中包含更多信息,包括名称映射的序数和编译器使用的原始修饰名称。导入库是链接 DLL 时创建的 .lib。您将在 DLL 项目的构建目录中找到它。将其路径添加到链接器的 Additional Dependencies 设置。

于 2013-01-13T14:21:33.037 回答