Я пытаюсь вернуть структуру, чтобы я мог использовать ее в Python. Я начинающий программист, поэтому, пожалуйста, объясните мне, что я делаю неправильно. Мне удалось вернуть простые ctypes раньше (bool, unsigned int), но структура слишком сложна для меня. Это то, что у меня есть:Возвращение struct из C++ dll в Python
DLLAPI.h
#define DLLAPI extern "C" __declspec(dllexport)
...
DLLAPI myStruct* DLLApiGetStruct();
DLLAPI.cpp
EDIT1: вместо TString, тип структура членов в wchar_t * сейчас, но ошибка я получаю то же самое
...
typedef struct myStruct{
wchar_t* id;
wchar_t* content;
wchar_t* message;
} myStruct;
DLLAPI myStruct* DLLApiGetStruct(){
myStruct* test = new myStruct();
test->id = _T("some id");
test->content = _T("some content");
test->message = _T("some message");
return test;
}
вот мой код Python:
...
class TestStruct(Structure):
_fields_ = [
("id", c_wchar_p),
("content", c_wchar_p),
("message", c_wchar_p)
]
class SomeClass(object):
....
def test(self):
myDLL = cdll.LoadLibrary('myDLL.dll')
myDLL.DLLApiGetStruct.restype = TestStruct
result = myDLL.DLLApiGetStruct()
print "result type: ", type(result)
print "-"*30
print "result: ",result
print "-"*30
print result.id # line 152
это то, что я получаю:
result type: <class 'Foo.TestStruct'>
------------------------------
result: <Foo.TestStruct object at 0x027E1210>
------------------------------
Traceback (most recent call last):
....
....
....
line 152, in test
print result.id
ValueError: invalid string pointer 0x00000002
TString Я использовал это станд :: wstring
Если ввести в MyStruct быть указателями или что-то вместо TString? Пожалуйста, помогите мне, я потратил 5 дней, пытаясь сделать эту работу.
@eryksun вы мой герой: D, пожалуйста, опубликуйте это как ответ, и я приму это – Aleksandar
спасибо еще раз! – Aleksandar