Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
桥接非托管类和托管类 我有一个本地C++类,导出到Win32 DLL: class __declspec(dllexport) Manager { ... }_C++_Clr_Unmanaged_Managed - Fatal编程技术网

桥接非托管类和托管类 我有一个本地C++类,导出到Win32 DLL: class __declspec(dllexport) Manager { ... }

桥接非托管类和托管类 我有一个本地C++类,导出到Win32 DLL: class __declspec(dllexport) Manager { ... },c++,clr,unmanaged,managed,C++,Clr,Unmanaged,Managed,Dll已成功创建。让我们称之为非托管.dll 我想在.Net应用程序中使用这个类。因此,我决定创建托管C++包装器类。因此,我创建了一个新的CLR类库,将Unmanaged.dll设置为链接器的输入 编译托管dll时,我遇到以下错误: 致命错误LNK1107:无效或损坏的文件:无法在0x318读取。(project ManagedBridge中的Unmanaged.dll) 这两个项目都设置为编译为x64。DLL导出查看器显示类的构造函数和方法。所以Dll看起来不错 我缺少什么吗?您不能将DLL

Dll已成功创建。让我们称之为
非托管.dll

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

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

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

这两个项目都设置为编译为x64。DLL导出查看器显示类的构造函数和方法。所以Dll看起来不错


我缺少什么吗?

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

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