ich bin gerade dabei mein Lazarus Programm (Win32 GUI) zu debuggen, weil es plötzlich (ab Version Lazarus 1.6.2, Zur Zeit 1.6.4) nicht mehr die Bibliotheksfunktionen der externen C++ dll einbindet und direkt nach dem kompilieren bzw externen Aufruf abstürzt. Ob es etwas mit der Lazarus Version zu tun hat, möchte ich hier herausfinden. Der Absturz wird mit der Fehlermeldung: "Die Anwendung konnte nicht korrekt gestartet werden (0xc000007b). ...." begleitet und die GUI öffnet sich nicht.
Die Bibliothek (DLL) wird von einem MinGW Compiler auf Netbeans 8.2 (mit GCC 6) mit den Compileroptionen "-static-libgcc -static-libstdc++ -DHAVE_STRUCT_TIMESPEC" im Standard C++14 umgesetzt. Die zu exportierenden DLL Funktionen werden mit folgendem Syntax exportiert:
Code: Alles auswählen
#ifdef __cplusplus
extern "C" {
#endif
int32_t extern_nsifun(const char* password, int32_tcall_id);
const char* extern_getversion();
int32_textern_testfun(int32_t i);
#ifdef __cplusplus
}
#endif
Auf der Lazarus-Seite versuche ich die Funktionen statisch einzubinden und zwar im UNIT Teil "interface". Die Einbindung geht wie folgt:
const DLL_NAME='liblibfraes.dll';
Code: Alles auswählen
function extern_nsifun(password:Pchar;call_id:int32):int32; cdecl; external DLL_NAME;
function extern_getversion:Pchar; cdecl; external DLL_NAME;
function extern_testfun(ii:int32):int32; cdecl; external DLL_NAME;
Gibt es einen anderen Weg an die Funktionen zu kommen - Stichwort dynamisches einbinden, da bin ich mir noch unsicher ? Gibt es eine spezielle Compiler-Einstellung, dich ich übersehen habe? Hat es was mit der Versionierung von Lazarus zu tun?
ich bitte um Antwort, da ich hier nicht weiter komme...
Viele Grüße, Mojo