A
Hallo,
ich möchte eine Callback-Funktion von einer managed Klasse (Clr) an eine unmanaged Klasse einer dll (Win32) übergeben. Der Code wird zwar ohne Fehler compiliert, aber sobald ich das Programm starte, bekomme ich folgende Fehlermeldung (Visual Studio 2010):
"Unhandled exception at 0x1004acda in Test_Interface.exe: 0xC0000005: Access violation reading location 0x00000000."
Was laut einigen Foren-Einträgen auf einen Null Pointer hinweist?
Interface.h
ref class Interface
{
delegate void MyDel(DWORD, LPBYTE, DWORD, PVOID);
...
void Read_From_Message_System(void);
void MyMSGServiceNotifyCallback (DWORD dwNotify, LPBYTE lpbyData, DWORD dwItems, PVOID lpUser);
};
Interface.cpp
void Interface::Read_From_Message_System(void)
{
ODK_Functions *ODK_Send = new ODK_Functions();
MyDel ^ StaticDelInst = gcnew MyDel(this, &Interface::MyMSGServiceNotifyCallback);
pin_ptr<MyDel^> myPinPtr= &StaticDelInst;
IntPtr myPtr = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(StaticDelInst);
ODK_Send->StartMsgServiceWithCallback((void (__cdecl *)(DWORD, LPBYTE, DWORD, PVOID))myPtr.ToPointer());
}
ODK_Functions.h
class ODK_Functions{
...
public:
__declspec(dllexport) void StartMsgServiceWithCallback(void (*fp)(DWORD, LPBYTE, DWORD, PVOID));
...
ODK_Functions.cpp
void ODK_Functions::StartMsgServiceWithCallback(void (*fp)(DWORD, LPBYTE, DWORD, PVOID))
{
CMN_ERROR Error;
BOOL ret = FALSE;
TCHAR szText[255];
DWORD dwServiceID = NULL;
VOID* pvUser = AfxGetApp();
ret= MSRTStartMsgService(&dwServiceID,
(MSG_SERVICE_NOTIFY_PROC)fp,
NULL,
MSG_NOTIFY_MASK_ALL,
pvUser,
&Error);
...
}
Kann mir jemand sagen was ich falsch mache? Ich probiere schon seit 2 Tagen eine Lösung zu finden, komme aber einfach nicht weiter.
Viele Grüße
Asterix