繁体   English   中英

CTypes:将指针传递给数组时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM