Seite 1 von 1

ctypes und LPCSTR

Verfasst: Donnerstag 18. August 2016, 14:18
von derbernd
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

Re: ctypes und LPCSTR

Verfasst: Donnerstag 18. August 2016, 15:43
von BlackJack
@derbernd: Python 2 oder 3? Und wie hast Du `TS_GetLongVariable()` in Python mit `ctypes` ”deklariert”?

Re: ctypes und LPCSTR

Verfasst: Freitag 19. August 2016, 06:14
von derbernd
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

Re: ctypes und LPCSTR

Verfasst: Freitag 19. August 2016, 07:07
von Sirius3
@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.

Re: ctypes und LPCSTR

Verfasst: Freitag 19. August 2016, 07:43
von derbernd
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: