Я пытаюсь преобразовать следующий код C в C# ... но я, кажется, застреваю при правильной конвертации структуры в этот обратный вызов. Компиляция отлично, но во время работы стек оказывается несбалансированным.P/Вызывать делегата C со структурой 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 (исх куб);
Я просто упускаю из виду что-то?
Cheers.
Просто потому, что вы можете привести пример в C, это не вопрос C. – Deduplicator
Что такое лучшая тема для публикации? Просто C#? – bl4kh4k
Что вы спрашиваете? Не о C, только о C#. В частности, вы спрашиваете о p/invoke. – Deduplicator