python中的Ctype

2024-09-24 12:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Linux Ubuntu中有这个C++代码,我想用Python使用这个方法 但无法将参数发送到ctype.cdl.函数在

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++中使用此函数:

^{pr2}$

还有我的python源代码(没用!!)是:

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";

Tags: key函数代码datastringdlcharbuffers
1条回答
网友
1楼 · 发布于 2024-09-24 12:24:14

让我们看看代码。。。在

string_buffers = [addressof(create_string_buffer(16)) ]

这行代码创建了一个Python列表,其中包含一个16字节字符串缓冲区的地址(或者可能不是字节而是字符,请自己查找)。在

^{pr2}$

这一行用字符串“5555555555555”替换上面的指针。在

dl.getuserdata(0,string_buffers,string_buffers2);

在这里,您将带有字符串的列表传递给函数,而函数则接受指向字节的指针。问题是你想在这里实现什么,也就是说,你想不想写缓冲区。如果不是,在C++中使用^ {CD1}},简单地将^ {< CD2}}作为参数,cType将自动为您做其余的操作。在

也就是说,可能是我猜错了,因为你还没有解释到底发生了什么(引用错误消息!)以及你是如何确定某件事不起作用的。此外,您应该清理您的损坏的C++代码,或临时用更小的更适合解释确切问题的代码替换它。在

相关问题 更多 >