Hallo allerseits,
ich habe ein kleines Problem mit der Einbindung einer Navi-Lösung in ein Delphi Projekt. Die Schnittstelle ist eine C++
DLL mit entsprechenden Header Files. Ich bin zumidestens soweit, dass ich die Navi-Anwendung über die
DLL - Funktion starten kann. Das Problem ist, dass zur Kommunikation mit meiner Anwendung eine Callback-Funktion verwendet wird. Und genau das funzt leider nicht. Sowie etwas an die Callback Funktion von der Navi-Anwednung aus geschickt wird, gibt's ne Schutzverletzung. Hier mal die Definitionen aus dem Header File und meine Umsetzung. (Das Ganze soll später in eine Komponente verpackt werden, deshalb schon das objekt TSygicMap)
typedef void (_stdcall *APPLICATION_HANDLEPROC)(int nEvent, void* pData);
=> der Aufruf im C++ Beispiel
INT CApplicationAPI::InitApi( LPCTSTR lpszPath, APPLICATION_HANDLEPROC pfnApplicationEventHandler, int nLeft, int nTop, int nWidth, int nHeight, BOOL bRunInForeground /*= TRUE*/ )
{
if ( !LoadAPI(_T("ApplicationAPI.dll")))
return -1;
if ( _ghInitApi != NULL )
{
return _ghInitApi( lpszPath, pfnApplicationEventHandler, nLeft, nTop, nWidth, nHeight, bRunInForeground );
}
return -1;
}
und hier die Delphi Umsetzung:
Delphi-Quellcode:
Type
APPLICATION_HANDLEPROC = Procedure (nEvent: Integer; pData: Pointer); stdcall;
_cyg_InitAPI = Function (lpszPath: PAnsiChar; pfnApplicationEventHandler: APPLICATION_HANDLEPROC;
nLeft, nTop, nWidth, nHeight: Integer; bRunInForeground: wordbool = True): Integer; stdcall;
...
Procedure Handler (var nEvent: Integer; pData: Pointer); Stdcall;
Begin
ShowMessage('Hallo');
End;
function TSygicMap.InitAPI(strPath:STring) : Integer ;
begin
result:= _proc_InitAPI(@PansiChar(StrPath),@handler,FLeft,FTop,FWidth,FHeight,FRunInForeground);
end;
Ich hoffe, Ihr könnt helfen.
Gruß Andy