Probleme mit dem Aufruf einer "C" funktion in "C++"
-
FrankTheFox schrieb:
ich bekomme einen "***glibc" wenn ich eine Funktion aufrufe die so deklariert ist:
Komisch... Müsste das nicht ein "xxxglibc" sein?
-
Oh menno,
#ifdef _LINUX #define int32 int ...^^ kein long int tut mir leid, zu schnell drüber geschaut.
die Deklaration der Funktion die ich aurufe:
SPCM_IMPORT drv_handle _stdcall spcm_hOpen( char* szDeviceName );wobei
#ifdef _LINUX ... #ifdef __cplusplus # define SPCM_IMPORT extern "C" # else # define SPCM_IMPORT #endif #define _stdcallrufe ich nur spcm_hOpen auf:
char szDrvName[20]; sprintf(szDrvName, "/dev/xxxx%d", idx); void* hDrv = spcm_hOpen( szDeviceName );dann habe ich einen Speicherzugriffsfehler.
mache ich dann noch...
spcm_vClose( hDrv );
ist def als
SPCM_IMPORT void _stdcall spcm_vClose( drv_handle hDevice);wobei drv_handle
#define drv_handle void*wobei das dann zu
extern "C" void spcm_vClose( hDrv );wird.
dann ***glibc double free...
die Funktionsaufrufe spcm_vClose und spcm_hOpen lösen die Probleme aus.
-
Ungarische Notation missbraucht

-
Hey komm, ich missbrauche hier nix. Nee so einer bin ich nicht.
-
Schon besser

Leider ist schwer zu sagen, wo das Problem liegt. Angenommen, szDrvName ist lang genug (wovon ich ausgehe), kann es eigentlich nur sein, dass die Aufrufkonvention doch eine andere ist als angegeben. Oder dass die Bibliothek kaputt ist.
-
Hi,
ja dass vermute ich auch. Der Array sollte gross genug sein. Was die Funktionen machen weiss ich nicht, kann nur die Header einsehen. Kann ich irgendwo sehen, wie die Makro's umgesetzt werden? Ich denke aber auch die Lib's sind vermurkst. Aber das vewundert mich ja umso mehr.
-
Welchen Wert hat idx?
-
Tja,
nach -save-temps und der Suche in den ii-Dateien wird
extern "C" void spcm_hOpen( char* szDeviceName );und
extern "C" void spcm_vClose( void* hDevice );angezeigt. Aber das scheint in Ordnung zu sein.
-
seldon schrieb:
Welchen Wert hat idx?
0
-
Hi,
updaten der libs hat's gebracht.
Gruss