簡體   English   中英

通過Python中的Ctypes將指針傳遞給DLL

[英]Passing pointer to DLL via Ctypes in Python

我正在嘗試使用Python與我創建的DLL中的“ ReturnBuffer”函數進行接口,並遇到了緩沖區值似乎未被該函數修改的問題。 “ ReturnBuffer”函數采用兩個參數,即緩沖區的長度和指向緩沖區的指針,我想知道是否正確地傳遞了指針。 我編寫了c函數,如下所示:

__declspec(dllexport) int ReturnBuffer (int num_numbers, unsigned __int32 *buffer);

int ReturnBuffer (int num_numbers, unsigned __int32 *buffer)
{
    int i;
    for (i = 0; i < num_numbers; i++) {
    buffer[i] = buffer[i] + i ;
    }
    return 1;
}

我使用下面的python代碼加載DLL:

_file = 'MyMathDLL.dll'
_path = os.path.join(*(os.path.split(__file__)[:-1] + (_file,)))
_math = ctypes.cdll.LoadLibrary(_path)

然后,我創建一個1的數組並將該數組的長度和該數組的指針傳遞給函數“ ReturnBuffer”,我期望該函數將采用該指針並修改緩沖區中的值。

_math.ReturnBuffer.restype = ctypes.c_int
_math.ReturnBuffer.argtypes = [ctypes.c_int, ctypes.POINTER(ctypes.c_uint32)]

nelem = 10
variable = ctypes.c_double(10.0)
Buffer_Type = ctypes.c_uint32 * nelem
Buffer = (1,1,1,1,1,1,1,1,1,1)

print(_math.ReturnBuffer(ctypes.c_int(nelem),Buffer_Type(*Buffer)))
print(Buffer)

Screen Output:
1
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

Process finished with exit code 0

數組初始化在docs中進行了描述: https : //docs.python.org/2/library/ctypes.html

嘗試這個:

Buffer = (ctypes.c_uint32 * nelem)()
for i in range(0, nelem):
    Buffer[i] = 1
print(_math.ReturnBuffer(nelem, Buffer))
print(Buffer)

或這個:

Buffer = (ctypes.c_uint32 * nelem)(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
print(_math.ReturnBuffer(nelem, Buffer))
print(Buffer)

暫無
暫無

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

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