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

标签 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++ 代码来处理它,包括事件参数。

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

但我们没有使用任何我不认为的 Windows header ,并且如果有更简单的方法来执行此操作,我也不想添加所有这些内容。

感谢您的阅读!

最佳答案

好吧,这比我想象的要容易,但对我来说这就像巫术......

基本上是在c++中添加

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

然后在c#中添加

public delegate void CppCallback();

当你想开火时,

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

关于c++ - 将非托管 C++ 方法传递给 C# dll 进行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325802/

相关文章:

c++ - 你如何从 C++ 中的文件中读取一个单词?

C++ 在公共(public)函数中使用 system() 安全还是不安全?

c# - 我可以在我的 C# 项目中使用用 C++ 编写的 DLL 吗?

c# - Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem,Marshal.SizeOf VS sizeof()

c# - 与非托管代码相比,在 TCP/UDP 套接字上读取/写入大量数据时托管代码是否存在性能损失?

c++ - 并行 std::lists,根据列表 B 中项目的状态删除列表 A 中的项目?

vb.net - 无法将公式分配给 Excel 中的单元格区域

.net - Mono 与 .NET Interop 的好奇心

c++ - wchar_t 数组

c++ - vector constructor 创建少一个元素的 vector