我們有一個用C++編寫的實現了網絡協議的進程外COM應用程序。當收到一個數據包時,回調被調用到註冊該數據包的應用程序中。如何在C++/CLI中使用COM進行回調
回調接口被定義爲這樣:
[helpstring("method MessageHandler")] HRESULT MessageHandler([in,size_is(nSize)] char * szBuf, int nSize, DWORD dwTransCode, DWORD dwSenderID, BSTR bstrFromIP);
在C++中使用這種尚未一個問題。我們現在有一個案例,我們有一個需要接收回調的C++/CLI應用程序。劈砍而去後,直到編譯器是幸福的,我到下面的實現:
ref class MessageHandlerClass : public MessageRouterCallback
{
public:
virtual void MessageHandler(signed char %buffer, int size, unsigned int msgId, unsigned int fromId, System::String^ fromIp)
{
switch (msgId)
{
case MaintenanceMsgs::maintenance_event_message::ID:
{
SomeStructure msg;
myHandler->HandleMaintenanceEvent(&msg);
}
}
}
這是我第一次涉足C++/CLI。
第一個問題:'%'在'signed char%buffer'中意味着什麼?
第二個問題:我可以放置一個斷點,看看回調是否被調用。我可以看看內存調試器中的'buffer'參數,它包含我期望的數據。我一直非常不成功地將這些數據提取出來並放入變量'msg'中。我知道我不能像C++那樣進行類型轉換,但是我嘗試過的每個例子(主要是InteropServices :: Marshal和一些pin_ptr的東西)似乎都無法讓我獲得任何幫助。
SomeStructure在頭文件中聲明並且包含在C++和C++/CLI應用程序中。 SomeStructure包含2個無符號短褲,後面跟着三個字符數組。
任何方向從哪裏去這裏將不勝感激。