【发布时间】: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# 库的信息。