2016-08-30 5 views
0

Ich habe eine C++ - DLL-Bibliothek. Eine Funktion wird wie folgt angezeigt.Wie übergeben Zeichenfolge Parameter an C++ - Funktion mit Ctypes, Python

Der DLL-Import in Python ist korrekt.

int _ParseLogin2Resp(const std::string& username, 
        const std::string& password, 
        char szErr[1024]); 

In der Tat habe ich viele Möglichkeiten versucht, Parameter zu übergeben. Ich kenne den Unterschied zwischen C++ std::string und char *.

1.Use das c_char_p() und byref()

username = ctypes.c_char_p("username") 
_ParseLogin2Resp(ctypes.byref(username),...) 

2.Use create_string_buffer()

username = ctypes.create_string_buffer("username") 
_ParseLogin2Resp(username,...) 

Aber Funktion ERROR zurück

Der Benutzername oder das Passwort ist leer.

So konnte ich keine Lösung finden, um String-Parameter an meine Funktion zu übergeben.

Meine Frage ist.

Ist es möglich, dass ich korrekte Parameter übergeben konnte, um meine Funktion wie erwartet aufzurufen, oder muss ich meine DLL-Bibliothek neu schreiben, damit die Funktion korrekt funktioniert?

+0

Schreiben Sie eine c-Funktion, die char * akzeptiert, und rufen Sie in dieser Funktion die benötigte cpp-Funktion auf. – neohope

+0

Richtig! Danke ~ – ddming000

Antwort

0

Python doc sagt Ctypes bietet C-kompatible Datentypen, es ist besser, C-Stil-API-Schnittstelle in Ihrer DLL zu verwenden.

Verwandte Themen