у меня есть этот код C++ в Linux Ubuntu я хочу использовать этот метод в Python с помощью CType , но не могу отправить параметр в ctype.cdl.funcionCTYPE в питоне
C++ код:
extern "C" unsigned char* getuserdata(int code,unsigned char* globalkey,unsigned char* key)
{
unsigned char data[256];
KeyA *keya;
keya=new KeyA;
keya->OpenDevice(0);
keya->Init(globalkey,globalkey,globalkey,globalkey);
keya->ReadUserMemory(0,256,key,data);
return data;
}
образца использовать эту функцию в C++:
unsigned char g_user[16] = { 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22 };
unsigned char publickey[16] = { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55 };
printf("function Return: %s\n", getuserdata(0,publickey,g_user));
и мой исходный код питона (не работал !!) является:
from ctypes import *
dl=cdll.LoadLibrary('/home/iman/KCore/kcore/hkey.so');
dl.getuserdata.restype = c_char_p
string_buffers = [addressof(create_string_buffer(16)) ]
string_buffers[0]= "5555555555555555";
string_buffers2 = [addressof(create_string_buffer(16)) ]
string_buffers2[0]="2222222222222222";
st= dl.getuserdata(0,string_buffers,string_buffers2);
print st+"\n";
'data' находится в стеке и уничтожается после возвращения функции. Вы возвращаете указатель на объект, который больше не существует. Другими словами, эта функция нарушается независимо от того, как вы ее называете, ctypes не влияет на нее. О, и 'keya' просочился, что является еще одной причиной его перезаписи. –
Можете ли вы отправить мне истинный код C++ и python? –