簡體   English   中英

Python ctypes:c_char_p 沒有返回正確的值

[英]Python ctypes: c_char_p not returning the correct value

我是 Ctypes 的新手,並試圖制作一個包裝器來使用一些 dll 函數,但我首先遇到了一個問題,這里是代碼

C function結構

long func(char *pID);

Python代碼

lib = WinDLL("some.dll")
lib.func.restype = c_long
lib.func.argtypes = [c_char_p]
ID = c_char()
lib.func(byref(ID))
print(ID)

這輸出 8 這是正確的,但只有第一個字符
問題是我需要完整的 output 而不僅僅是第一個字符。 我用 c_char_p 替換了它,它給出了這個 c_char_p(925904440) 這是一個指針,但是當我打印它的值(ID.value)時它打印一個空字符串,而 c_char 給出了正確的值,為什么?
也嘗試了 create_string_buffer(10) 但給出了錯誤
預期 LP_c_char_p 實例而不是指向 c_char_Array_10 的指針

注意:我正在編寫一個 J2534 包裝器,因為我發現的所有庫都嘗試了 python 庫和 C# 庫,如果你知道或有一個工作的 J2534 庫,那么給我它的鏈接

您可以使用 create_string_buffer。 文檔說:

ctypes.create_string_buffer(init_or_size, size=None)

這個 function 創建一個可變字符緩沖區。 返回的 object 是 c_char 的 ctypes 數組。

init_or_size 必須是指定數組大小的 integer,或者是用於初始化數組項的字節 object。

https://docs.python.org/3/library/ctypes.html#ctypes.create_string_buffer

一個示例可能如下所示:

from ctypes import *

lib = cdll.LoadLibrary("some.dll")
lib.func.restype = c_long
lib.func.argtype = c_char_p

buf = create_string_buffer(9)
lib.func(buf)
print(buf.value.decode("utf-8"))

C 端的簡單測試 function 可能如下所示:

#include <string.h>

static const char some_data[] = "8.07.696";

long func(char *p) {
    strcpy(p, some_data);
    return 1L;
}

這會將預期結果打印到調試控制台:

8.07.696

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM