在 C++ 中使用回调函数 C# 委托(delegate) 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++ Error] ComputAddTest.cpp(55): E2034 Cannot convert '_Callback_Calc *' to 'long' [C++ Error] ComputAddTest.cpp(55): E2342 Type mismatch in parameter 'Callback_Result' (wanted 'long', got '_Callback_Calc *') [C++ Error] ComputAddTest.cpp(56): E2193 Too few parameters in call to '__stdcall CoInitialize(void *)'
谢谢
最佳答案
您的Add_Callback
函数需要指向该函数的指针。所以在行中:
m_Calc->Add_Callback(10,10,(_Callback_Calc *)callback_func);
您需要将第 3 个参数更改为指向 callback_func
的指针。
关于c# - 在 C++ 中使用回调函数 C# 委托(delegate) dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55252028/