Я пытался создать разделяемую библиотеку языка Си, на которую будут ссылаться из 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