我想將下面的C代碼轉換爲C#...但我似乎被卡住時正確地將結構轉換爲該回調。編譯良好,但在運行時堆棧結果不平衡。P /調用一個C代理結構到C#
Ç
INT32 RegisterCallback4ThirdParty(BtSdkCallbackStru* call_back);
typedef struct _CallbackStru
{
BTUINT16 type; /*type of callback*/
void *func; /*callback function*/
}CallbackStru, *PBCallbackStru;
以下是我的轉換:
C#
[DllImport("SDK.dll")]
[return: MarshalAs(UnmanagedType.I4)]
public static extern Int32 RegisterCallback4ThirdParty(ref CallbackStru callback);
public class CallbackStru
{
public ushort type; //type of callback
public object func; //callback function
}
當調用在C#程序:
CallbackStru cb = new CallbackStru();
AppInquiryInd appInquiryInd = AppInquiryInd;
cb.type = 0x04;
cb.func = appInquiryInd;
RegisterCallback4ThirdParty(ref cb);
在哪裏AppInquiryInd是這個代理:
public delegate void AppInquiryInd(UInt32 deviceHandle);
它未能在RegisterCallback4ThirdParty(參照CB);
我可以簡單地忽略一些東西嗎?
乾杯。
僅僅因爲你可以在C中給出一個例子並不會使這個C問題。 – Deduplicator 2014-10-26 21:48:15
什麼是最好的話題發佈這下?只是C#? – bl4kh4k 2014-10-26 21:49:15
你在問什麼?不是關於C,只關於C#。具體而言,您正在詢問p/invoke。 – Deduplicator 2014-10-26 21:51:33