none
CLI中,如何把C#的委托交给C++的回调函数? RRS feed

  • 问题

  • 我在使用C++/CLI,我发现了一个问题。

    C#传递过来一个变量,类型是

    [System::Runtime::InteropServices::UnmanagedFunctionPointerAttribute(System::Runtime::InteropServices::CallingConvention::StdCall, CharSet = System::Runtime::InteropServices::CharSet::Unicode)]
    public delegate int pfnCallback(int Result);

    我需要将这个类型的变量赋值给

    typedef int(__stdcall* pfnNativeCallback)(int Result);

    //伪代码

    void SetCallback(pfnCallback^ callback)

    {

           pfnNativeCallback pNativeCallback = callback; //我要怎样才能实现这样的操作?

    }

    2019年8月5日 13:30

答案

  • pfnNativeCallback是函数指针,callback是委托类实例,因此无法赋值。你可以保存callback到一个全局变量或成员变量中,然后把你自己的全局函数或成员函数取指针赋值给pfnNativeCallback,在你自己的函数中调用保存的callback。换句话说就是中转一下。
    2019年8月5日 13:51

全部回复

  • pfnNativeCallback是函数指针,callback是委托类实例,因此无法赋值。你可以保存callback到一个全局变量或成员变量中,然后把你自己的全局函数或成员函数取指针赋值给pfnNativeCallback,在你自己的函数中调用保存的callback。换句话说就是中转一下。
    2019年8月5日 13:51
  • pfnNativeCallback是函数指针,callback是委托类实例,因此无法赋值。你可以保存callback到一个全局变量或成员变量中,然后把你自己的全局函数或成员函数取指针赋值给pfnNativeCallback,在你自己的函数中调用保存的callback。换句话说就是中转一下。
    感谢您的答复,看来还是老老实实写C++比较好
    2019年8月6日 5:48