У меня есть приложение-служба C # Windows, которое передает указатель на функцию обратного вызова в dll C ++. Я определил как указатель функции на стороне C #, так и на стороне C ++ для типа __stdcall. Все работает нормально до тех пор, пока Cll не вызовет обратный вызов и не выдаст необработанное нарушение доступа к исключениям в 0x04cb0e. Отладка останавливается в файле treadex.c под вызовом endthread в приложении C #.
public delegate void NotificationFunc(int notifycode, IntPtr Userdata);
[DllImport("notice.dll")]
void INotify(NotificationFunc notefunc,IntPtr Userdata);//ignore the IntPtr Userdata
.
.
.
NotificationFunc notefunc = new NotificationFunc(Noticallback);
INotify(notefunc, Intptr.zero);
//notice.dll triggers this callback thru the delegate passed in
void Noticallback(int notifycode, IntPtr userdata)
{
Swtich(notifycode)
{
//my actions
}
.
.//Error Exceptions happens here when trying to end the thread/call
}
Я знаю, что должен обработать ресурсы обратного вызова, так как это событие одностороннего вызова. Я пробовал GC & GCHandle, чтобы он не был GC, но кажется, что всегда есть утечка памяти или ошибка. Может кто-нибудь помочь? Спасибо