将非托管C ++方法传递给C#dll进行回调

时间:2013-01-14 20:05:14

标签: c++ interop unmanaged

我有一个.Net dll我已经注册,并且能够从我的C#代码调用方法。 我基本上遵循了本教程:http://support.microsoft.com/kb/828736

现在我需要在c#中异步执行某些操作,所以我需要一些方法来告诉c ++代码我已经完成了。

我创建了一个类似的方法:

public void Init(string server, IntPtr callback); 

我可以在c ++中看到:

Init(BSTR server, long callback);

当我调用它时,我还需要将变量传递回c ++代码。

基本上,我有一个在C#代码中被触发的事件,我需要c ++代码来处理它,包括事件args。

我很高兴自己做阅读,但我根本找不到任何东西。我确实看到了一些关于Windows事件的东西......在这里 http://msdn.microsoft.com/en-us/library/windows/desktop/aa385771(v=vs.85).aspx

但我们没有使用任何我不认为的Windows标题,如果有更简单的方法,我不想添加所有这些内容。

感谢您阅读!

1 个答案:

答案 0 :(得分:3)

好吧,这比我想象的容易,但对我来说似乎是伏都教......

基本上在c ++ add

void CALLBACK CppCallbackc()
{
    std::cout << "test";
}

然后在c#add

public delegate void CppCallback();

当你要发射它时,

Marshal.GetDelegateForFunctionPointer(cppCallback, typeof(CppCallback)).DynamicInvoke(null);