![](/img/trans.png)
[英]Python Ctypes passing pointer to structure containing void pointer array
[英]CTypes: errors passing pointer to array
我正在使用CTypes将双打数组传递给DLL。 代码如下。
我需要将指针传递给数组。 我试图通过四种不同的方式传递它,如代码所示。 为简单起见,我将相同的数组传递了三次。
TestArrayType = ctypes.c_double * 1000
arrNew = TestArrayType()
hDLL = ctypes.WinDLL(r"C:/NASM_Test_Projects/Test_Project_Full2/Std_Math_Formulas.dll")
CallTest = hDLL.TryThemAll
CallTest.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double)]
CallTest.restype = ctypes.c_int64
t = type(arrNew)
#Call #1
#ptrA = ctypes.cast(arrNew, ctypes.POINTER(ctypes.c_double))
#retvar = CallTest(ptrA, ptrA, ptrA)
#Call #2
#retvar = CallTest(ctypes.pointer(arrNew), ctypes.pointer(arrNew), ctypes.pointer(arrNew))
#Call #3
#retvar = CallTest(ctypes.POINTER(arrNew), ctypes.POINTER(arrNew), ctypes.POINTER(arrNew))
#Call #4
retvar = CallTest(arrNew, arrNew, arrNew)
上面的四个不同的调用给出以下错误消息:
呼叫1:消息=例外:访问冲突读取0x000000000000000D
调用2:ctypes.ArgumentError:参数1::预期的LP_c_double实例,而不是LP_c_double_Array_1000
呼叫3:必须为ctypes类型
呼叫4:消息=例外:访问冲突读取为0xFFFFFFFFFFFFFFFFFF
所以我现在还没有做。 我已经做了很多研究,但是我仍然没有找到将指针传递给数组的正确方法。
表达式t = type(arrNew)中t的值是:
t =类Trans_01_Samples_04.c_double_Array_1000
在此先感谢您的帮助。
马克·托隆宁(Mark Tolonen)是对的-#4确实有效,并且问题出在我的DLL代码中。 该代码在NASM中,并确认我创建了一个超简单的DLL,该DLL接受了数组指针并返回了预期值。
作为记录,这是新的简化代码:
; Header Section
[BITS 64]
export TryThemAll
section .data
section .text
TryThemAll:
push rdi
push rbp
mov rdi,[rcx]
pop rbp
pop rdi
ret
现在,我要对更大的NASM dll代码进行运行时调试。
为了让其他Stack Overflow阅读器将来使用,本文确认了将指针传递到CTypes中的数组的正确方法。
非常感谢,马克
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.