我试图创建一个共享的C语言库,以供Python引用。主要问题是我只能在C中获取指向数组的返回指针的地址。我试图从C函数发送的返回地址中读取值。但是,我尝试的每种方法都会导致Python失败,并且无法访问该值。有没有人可以提供一些建议?
path='../crypto_lib/vrf.so'
lib=CDLL(path)
sk = lib.new_sk()
print(sk)
output:292500480
这是我要使用的C代码,它生成一个密钥并以转换后的十六进制类型返回并存储在shexbuf中。代码不是我自己的工作,它模仿了github上的一些示例,在使用C进行编译时可以很好地工作。给出预期的输出
char* new_sk(){
uint8_t public_key[crypto_sign_PUBLICKEYBYTES];
uint8_t secret_key[crypto_sign_SECRETKEYBYTES];
static char shexbuf[2*crypto_sign_SECRETKEYBYTES+1];
crypto_vrf_keypair(public_key, secret_key);
char* result;
result = to_hex(shexbuf, secret_key, crypto_sign_SECRETKEYBYTES);
return shexbuf;
}
我希望得到秘密密钥的价值, 但我只能得到一些似乎是地址。 当我尝试使用ctype从地址中读取值时,python退出窗口意外弹出
答案 0 :(得分:0)
ctypes
的参数和返回值默认为c_int
。您将看到返回的字符串的地址为c_int
。适当设置.restype
:
lib=CDLL(path)
lib.new_sk.restype = c_char_p
sk = lib.new_sk()
print(sk)