2

我希望非托管 C++ 代码将 C# 函数作为回调调用。我有一个围绕非托管代码的 CLI/C++ 类。此 CLI/C++ 类的实例存在于 C# 中。

C# 代码类似于以下文本。我有一个指向 callBack 方法的(委托)函数指针。我有 CLI_class 的 CLI 实例。我想在 addValueChangedCallBack 函数中以某种方式给它函数指针。

public Setup(){
    tempFUNC myFuncObj = new tempFUNC(callBack)
    CLI_class c=new CLI_class();
    c.addValueChangedCallBack(myFuncObj)
}

public delegate void tempFUNC(float x);

void callBack(float x){
....
}

然后在 CLI 代码中我想做这样的事情:

void addValueChangedCallback(void (*ManipCallBack)(float)){
   unmanagedCPPCLASS.addValueChangedCallback(ManipCallBack)

}

如何将函数指针转换为 C++ 指针 (*)?此外,我无法在 C++/CLI 项目中引用 C# 项目,因为 C# 类已经引用并使用了 C++/CLI 项目。会不会有依赖问题?

我在某些网站上看到了对“编组数据”或使用“互操作”的引用。我不明白它们是如何工作的,或者从我所看到的任何东西中它们到底做了什么,这些是我应该使用的吗?

4

1 回答 1

0

您可以让两个项目相互引用并使用 System.InteropServices.Runtime.Marshal.GetFunctionPointerForDelegate 来获取函数指针。

但如果我是你,我会创建 C# 类ComVisible并让 C++ 代码通过 COM 接口直接调用 C# 方法。这样就不需要 C++/CLI 包装器。正如您所经历的那样,包装器总是很痛苦。C++/CLI 有它的用途,但不是创建包装器。

于 2012-10-24T22:51:04.070 回答