繁体   English   中英

在 C++ 中使用回调函数 C# 委托 dll

[英]Using Call Back Function C# delegate dll in C++

在 C++ 中使用回调函数 C# 委托 dll

但我有一个错误我怎么不能修复它?

这是我的 C# 代码

 public delegate void Callback_Calc(int nResult); [Guid("180726E3-7185-4224-BF27-3A7A60E5D1A7")] public interface ICal { int Add(int a, int b); void Add_Callback(int a,int b,IntPtr Callback_Result); } [Guid("9FF07EDD-8DEE-4CCA-9BDF-2C753F7717AC")] public class Calc : ICal { public int Add(int a, int b) { return (a + b); } public void Add_Callback(int a, int b, IntPtr Callback_Result) { int sum = a + b; Callback_Calc func = (Callback_Calc)Marshal.GetDelegateForFunctionPointer(Callback_Result, typeof(Callback_Calc)); func(sum); } }

这是我的 C++ 代码

 extern "C" void __stdcall callback_func(int nResult); void __fastcall TForm2::btn2Click(TObject *Sender) { ICal *m_Calc; HRESULT hr = CoInitialize(NULL); hr = CoCreateInstance(CLSID_Calc,NULL,CLSCTX_INPROC_SERVER,IID_ICal,reinterpret_cast<void**>(&m_Calc)); if(FAILED(hr)) { CoInitialize(NULL); } int a = m_Calc->Add(2,5); lbl1->Caption = a; m_Calc->Add_Callback(10,10,(_Callback_Calc *)callback_func); CoInitialize(); } extern "C" void __stdcall callback_func(int nResult) { int a = nResult; int b = nResult; }

这是我的 C++ 错误代码

[C++ 错误] ComputAddTest.cpp(55):E2034 无法将“_Callback_Calc *”转换为“long” [C++ 错误] ComputAddTest.cpp(55):E2342 参数“Callback_Result”中的类型不匹配(想要“long”,得到“_Callback_Calc” *') [C++ 错误] ComputAddTest.cpp(56): E2193 调用 '__stdcall CoInitialize(void *)' 时参数太少

谢谢你

您的Add_Callback函数需要一个指向该函数的指针。 所以在这一行:

m_Calc->Add_Callback(10,10,(_Callback_Calc *)callback_func);

您需要将第三个参数更改为指向callback_func的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM