使用clr包裝c++的sdk來讓c#使用,sdk里的回呼是函式指標,想通過clr包裝,c#用委托
// core.h
namespace Core {
public ref class Live
{
public:
delegate void SucDelegateCallBack(void* data);
void init(SucDelegateCallBack^ suc);
};
}
// core.cpp
namespace Core {
void Live::init(SucDelegateCallBack^ suc) {
// sdk的頭檔案相關內容:
// typedef void (*SucCallback)(void* data);
// virtual void init(SucCallback suc = NULL) = 0;
// 想實作下面的想法,但是不知道如何將suc轉成SucCallback
GetCore()->init(SucDelegateCallBack); //這里是錯誤的:引數型別不對
}
}
如何將SucDelegateCallBack轉化成SucCallback呢?
uj5u.com熱心網友回復:
已解決!IntPtr ip = Marshal::GetFunctionPointerForDelegate(suc);
SucCallback cb = static_cast<SucCallback>(ip.ToPointer());
uj5u.com熱心網友回復:
謝謝,學到了簡單的呼叫委托方法轉載請註明出處,本文鏈接:https://www.uj5u.com/net/69563.html
標籤:C#
上一篇:通信物件 System.ServiceModel.Channels.ServiceChannel 無法用于通信,因為其處于“出錯”狀態。
下一篇:OpenGL DDA直線
