使用回电函数C#C 中的DLL

Using Call Back Function C# delegate dll in C++

本文关键字:C#C 中的 DLL 函数      更新时间:2023-10-16

使用回电函数C#委托DLL在C

但是我有一个错误我无法修复它?

这是我的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 *'to'long'[C 错误] ComputadDtest.cpp(55):E2342 在参数" callback_result"中键入不匹配(想要的'long', '_callback_calc *')[C 错误] ComputAddtest.cpp(56):E2193太少 呼叫" __STDCALL COINITIALIAME(void *)'

的参数

谢谢

您的Add_Callback功能需要指向该功能的指针。因此在线:

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

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