Mevcut C++ ile yazılmış bir dll projenize eklemek için ara dll oluşturarak yapacağınız Callback uygulamalarında GC callback metodunu kaldırması sorunucu çalışma aralığında CallbackOnCollectedDelegate Exception alıp uygulama kapanmasına neden olmaktadır.
Sorun:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void ApplicationMessageCallback(Int32 applicationId, IntPtr data, Int32 size);
[DllImport("xxx.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void inposext_set_application_message_callback(ApplicationMessageCallback cb);
public static void SetApplicationMessageCallback(ApplicationMessageCallback callbackFunction)
{
inposext_set_application_message_callback(callbackFunction);
}
Çözüm :
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void ApplicationMessageCallback(Int32 applicationId, IntPtr data, Int32 size);
[DllImport("xxx.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void inposext_set_application_message_callback(ApplicationMessageCallback cb);
private static ApplicationMessageCallback callback; // Keeps it referenced
public static void SetApplicationMessageCallback(ApplicationMessageCallback callbackFunction)
{
callback = callbackFunction;
inposext_set_application_message_callback(callback);
}
Hiç yorum yok:
Yorum Gönder