【C#】实现C#传回调函数到C++,由C++计算结果回调返回

1.C++代码实现
.h代码

extern "C" typedef int (*Callback)(int);
extern "C" __declspec(dllexport) void RegisterCallback(Callback cb,int x,int y);

.cpp代码

#include "CallBack.h"
void RegisterCallback(Callback cb,int x,int y)
{
    int result = cb(x * 3 + y * 2);  // 调用传递的函数指针
}

2.C#代码实现

// 定义与C++函数指针匹配的委托
public delegate int Callback(int result);

// 导入C++函数
[DllImport("Callback.dll")]
public static extern void RegisterCallback(Callback callback,int x,int y);

// 回调函数,符合委托签名
public int MyCallback(int result)
{
    Console.WriteLine($"C# Callback called with values: {result}");
    //return x + y;
    label2.Text = (result).ToString();
    return result;
}

  private void button1_Click(object sender, EventArgs e)
  {
      string x= textBox_X.Text.Trim() ==""? "0": textBox_X.Text.Trim();
      string y = textBox_Y.Text.Trim() == "" ? "0" : textBox_Y.Text.Trim();
      // 创建委托实例
      Callback cb = new Callback(MyCallback);
      // 注册回调
      RegisterCallback(cb,Convert.ToInt32(x), Convert.ToInt32(y));
      // 避免GC回收委托
      GC.KeepAlive(cb);
  }

3.结果
【C#】实现C#传回调函数到C++,由C++计算结果回调返回_第1张图片
【C#】实现C#传回调函数到C++,由C++计算结果回调返回_第2张图片

你可能感兴趣的:(c#,c++)