【问题标题】:Bridging unmanaged and managed classes桥接非托管类和托管类
【发布时间】:2013-01-13 13:42:35
【问题描述】:

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

class __declspec(dllexport) Manager { ... }

Dll 创建成功。我们就叫它Unmanaged.dll吧。

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

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

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

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

我有什么遗漏吗?

【问题讨论】:

    标签: c++ clr unmanaged managed


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多