ctypes und LPCSTR

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
derbernd
User
Beiträge: 13
Registriert: Montag 6. Oktober 2014, 08:19

Donnerstag 18. August 2016, 14:18

Hallo,
ich versuche das erste mal eine externe Library in python einzubinden. Die meisten Funktionen der Bibliothek funktinieren, leider bekomme ich die nachfolgende Funktion nicht zu laufen.

Die Definition in der header-Daei ist:

Code: Alles auswählen

BOOL TML_EXPORT TS_GetLongVariable(LPCSTR pszName, long* value);

/*******************************************************************************************
 Function: Reads a long integer type variable from the drive.
 Input arguments:
	pszName:	Name of the variable
 Output arguments:
	value:	Variable value
	return:		TRUE if no error; FALSE if error
*******************************************************************************************/
in python versuche ich die Funktion mittels:

Code: Alles auswählen

pos = c_long(0)
TS_GetLongVariable("APOS",byref(pos))
aufzurufen. Ich bekomme aber keinen Wert zurück, sondern False

Was muss ich ändern?

Danke
Zuletzt geändert von Anonymous am Donnerstag 18. August 2016, 15:38, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
BlackJack

Donnerstag 18. August 2016, 15:43

@derbernd: Python 2 oder 3? Und wie hast Du `TS_GetLongVariable()` in Python mit `ctypes` ”deklariert”?
derbernd
User
Beiträge: 13
Registriert: Montag 6. Oktober 2014, 08:19

Freitag 19. August 2016, 06:14

Ich verwende python 3.

Die Funktion `TS_GetLongVariable()` ist extern in einer c-Library deklariert und mit:

Code: Alles auswählen

lib =  ctypes.cdll.LoadLibrary("TML_lib.dll")
eingebunden.

VG
Sirius3
User
Beiträge: 8261
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 19. August 2016, 07:07

@derbernd: Du gibst also die Typen der Argumente nirgends an und hoffst, dass ctypes alles richtig macht. In diesem Fall wohl eher nicht, da Du einen Unicode-String an eine Funktion übergibst die einen Bytestring erwartet.
derbernd
User
Beiträge: 13
Registriert: Montag 6. Oktober 2014, 08:19

Freitag 19. August 2016, 07:43

danke für den kurzen aber richtigen Hinweis. Die restlichen String innerhalb meines Programms übergebe ich als Bytestring, nur hier nicht. Wie dämlich von mir :oops:
Antworten