c# - 在 C++ 中使用回调函数 C# 委托(delegate) dll

标签 c# c++

在 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/

相关文章:

c# - 仅在禁用项目上显示 WPF 工具提示

c# - 如何将此声明分离到一个单独的文件中?

c# - 回发后asp.net动态添加用户控件保存值

c++ - gcc8.2 和 (intel) icc19.0.1 之间的 constexpr 差异

c++ - CodeSynthesis XSD 动态树序列化

c++ - 不能使用c++在工厂模式中使用 map

c# - 使用sql server在EF6查询中返回空值

c# - C# Windows 应用程序可以使用 oAuth 吗?

c++ - 在 boost 中从 graphviz 读取的问题

c++ - 我可以在 Win32 DLL 中使用 LoadLibrary 吗?