【问题标题】:How to export a native class from a dll (namely a protobuf generated class)如何从 dll 中导出原生类(即 protobuf 生成的类)
【发布时间】:2012-06-29 20:06:53
【问题描述】:

我正在尝试在 C++/CLI 中编写一个包装 dll 以在 c# 中使用一些本机类。

为了测试,我创建了另一个使用 dll 的 C++/CLI 项目。

我的问题是,我想在测试项目的 dll 项目中使用本机类之一,但链接器抱怨它找不到此类成员的符号。 我猜这是因为没有定义原生类ref public。由于原生类代码是由 Google Protobuffers 编译器自动生成的,因此我无法在其中添加 ref public

别误会,我不想在以后的c#项目中使用这个native class,而是想在Test项目中直接访问。

【问题讨论】:

  • 你为什么不用protobuf-net?
  • 因为下层应该尽量留c++
  • 为什么会这样?你有什么实际原因吗?
  • 同一个dll也wrapps需要调用另一个native c dll的函数。所以我必须将数据缓冲区从 c dll 编组到托管 c++/c#,然后使用 protobuf-net。此外,部分代码可以集成到纯 c++ 环境中也不是不可能的。至少,我查看了两个 .net protobuf 实现,并不真正喜欢这些接口。如果不可能,我将放弃Test项目访问本机类的想法,并提供来自dll的纯托管测试接口。
  • 我刚刚重新检查了 protobuf-net API,我的问题是,它不使用标准的 .proto 文件。由于我们必须在不同平台之间共享一个 Protobuff 定义,因此别无选择。

标签: c++-cli native dllimport mixed-mode


【解决方案1】:

我认为您必须遵循典型的本地 c++ 方式来执行此操作:从 dll 中导出类,从测试项目中链接到 dll,然后在您需要使用的测试项目中#include 头文件班级。

我认为没有一种“托管方式”来引用和使用原生类(如果我错了,希望其他人会纠正我)。

【讨论】:

  • 我猜你是对的。因为我只需要它来进行测试,所以会很麻烦。所以我将在 dll 中添加一个托管的测试类。
猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2019-12-27
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多