【问题标题】:Connecting c++ and c# code with a c++/cli bridge使用 c++/cli 桥连接 c++ 和 c# 代码
【发布时间】:2009-05-18 15:25:47
【问题描述】:

我有一个使用本机 C++ dll 的本机 C++ 代码客户端应用程序。我正在研究将此代码与 c# dll 连接的可能性,因为它们更容易编写。我决定编写一个 c++/cli 桥接 dll,它可以通过 LoadLibrary 加载,并将调用传递给 c# dll。

客户端和dll之间的通信是这样的,客户端传递一个指向接口对象的指针,然后dll通过该接口对象与客户端进行通信。我将此对象包装在 c++/cli 桥接代码中,以便 c# 代码使用它。

桥还应该使用 __declspec(dllexport) 公开几个函数并将这些调用传递给 c# dll,因此它需要有一个指向 c# 接口的指针,它将传递它们。我想使用带有 gcroot 包装器的 c# 对象,但问题是我在这两个 dll 之间得到了循环依赖。 C# dll需要引用bridge dll才能使用包装类,bridge dll需要引用c# dll才能使用接口类。

我知道我可以使用 COM 而不是用 gcroot 包装 c# 对象,但我宁愿不这样做。有没有办法解决这个问题?

【问题讨论】:

  • 你不能将函数点/事件或委托从 C# 传递到 C++。我知道对于一些高级计时器的东西,您可以从 c# 轻松处理 C++ 事件。
  • 我知道这是一篇旧帖子,但请参阅 stackoverflow.com/questions/13293888/… 了解更多关于通过 c++/CLI 包装器在非托管代码中使用 C# 库的信息。

标签: c# c++ interop c++-cli


【解决方案1】:

只需在 C++/CLI 而不是 C# 中定义接口。这完全消除了对 C# 项目的依赖。

我建议将 C++/CLI 项目视为一个包装器——不要在其中定义任何新接口。只需获取当前 C++ 代码中的内容,并将其包装在“引用类”中,以便您可以从 C# 构造和调用它们。

【讨论】:

  • 这正是我正在做的 - 将 c++ 代码包装在 ref 类中,以便 c# dll 使用它们。但是网桥还必须将来自 c++ 客户端的调用转发到 c# dll。为此,桥必须使用一些 c# dll 的代码,因此依赖。我看不出它是如何被消除的。我是否遗漏了一些非常明显的东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多