桥接非托管和托管类

时间:2013-01-13 13:42:35

标签: c++ clr unmanaged managed

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

class __declspec(dllexport) Manager { ... }

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

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

编译托管dll时,我收到以下错误:

  

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

两个项目都设置为编译为x64。 DLL Export Viewer显示类的构造函数和方法。所以Dll似乎没问题。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:2)

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

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