我有一个导出到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似乎没问题。
我有什么遗失的吗?
答案 0 :(得分:2)
您无法将DLL传递给链接器,它不知道如何处理它。 DLL通常不适合帮助链接器确定DLL包含您调用的函数。从DLL导出可以是多个名称。它是一个数字(“序数”)是一个问题,链接器将不知道如何将数字映射到标识符名称。并且名称也不必匹配,名称通常被简化,其名称装饰被删除。
您必须告诉链接器DLL的导入库。其中包含更多信息,包括命名映射的序号和编译器使用的原始修饰名称。导入库是链接DLL时创建的.lib。您将在DLL项目的构建目录中找到它。将其路径添加到链接器的Additional Dependencies设置。