繁体   English   中英

Python 3.7-使用ctypes将参数传递给DLL

Python 3.7 - Passing parameters to DLL using ctypes

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下代码:

num1=10.1234
int1=10
ret=GetOutput(int1,num1)

函数GetOutput定义为

def GetOutput(int2, num2):
  lib = ctypes.WinDLL("mydllname.dll")
  prototype = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_double * 4096))
  paramflags = (1, "int2",), (1, "num2",),
  GetOutput = prototype(("GetOutput", lib), paramflags)    
  ret=GetOutput(int2, num2)
  return ret

我收到以下错误,要求您的帮助。

LP_c_double_Array_4096 instance instead of float

如果我将num1转换为:

num1=list(range(4096))
int1=10
ret=GetOutput(int1,num1)

我收到以下错误:

LP_c_double_Array_4096 instance instead of list

如果我将num1转换为数组,如下所示:

num1=list(range(4096))
int1=10        
for item in num1:
    arrayA = array("i", num1)
ret=GetOutput(int1,arrayA)

我收到以下错误:

<class 'TypeError'>: expected LP_c_double_Array_4096 instance instead of array.array

请尽可能多地向我解释编程知识,并且仅对OOPS,列表,元组,指针等有非常初步的/基本的了解,而对ctypes则一无所知。

谢谢

1 个回复

谢谢,下面的代码正在工作-我在理解dll在做什么时犯了一个错误。

num2不是输入而是输出,因此paramflags会改变。 这样做可以允许对num1进行任意声明。由于参数已更改,因此调用函数Getoutput_Sub现在仅需要一个输入。 以前,我通过使用相同的函数名感到困惑。

num1=10.1234
int1=10
ret=GetOutput_Main(int1,num1)

上面是调用函数的位置,下面是定义函数的方式

def GetOutput_Main(int2, num2):
    lib = ctypes.WinDLL("mydllname.dll")
    prototype=ctypes.WINFUNCTYPE(ctypes.c_int,ctypes.c_int,ctypes.POINTER(ctypes.c_double * 4096))
    paramflags = (1, "int2",), (2, "num2",),
    GetOutput_Sub = prototype(("GetOutput", lib),paramflags)    
    ret=GetOutput_Sub(int2)
    return ret

在前面的评论中,我说了两个功能和一个结构。 它实际上是三个功能。 我正在编写的两个文件和一个函数(用引号引起来的字符串)是dll的标准功能。

2 Python | 使用ctypes访问dll

我正在尝试访问Firefox Web浏览器附带的dll( nss3.dll )中的某些功能。 为了处理这个任务,我在Python中使用了ctypes。 问题是它在将dll加载到内存时的初始点失败。 这是我必须这样做的代码片段。 我得到的例外是 我也尝试从Firefox安 ...

3 使用Python Ctypes加载dll

我已经看过这里给出的例子ctypes - Beginner ,并使用不同的C代码执行相同的步骤。 我使用此处给出的C代码构建了一个.dll和.lib: http : //wolfprojects.altervista.org/articles/dll-in-c-for-python/ ...

4 通过Python中的Ctypes将指针传递给DLL

我正在尝试使用Python与我创建的DLL中的“ ReturnBuffer”函数进行接口,并遇到了缓冲区值似乎未被该函数修改的问题。 “ ReturnBuffer”函数采用两个参数,即缓冲区的长度和指向缓冲区的指针,我想知道是否正确地传递了指针。 我编写了c函数,如下所示: 我使用下 ...

5 无法使用ctypes将参数传递给dll(Python)

使用ctypes时遇到一些问题 我有一个带有以下界面的testdll 我也有一个.def文件,所以我有“真正的”名字 我可以通过ctype从dll加载和访问函数,但我无法传递参数,请参阅python输出 但我可以在没有参数的情况下添加功能吗?!?!?!?! ...

7 Python使用ctypes传递参数,参数无效

我是python中的新手,最近使用python编程CCD相机拍照。 我想使用ctypes调用.so文件中的函数。 该函数的原型是: HIDS是uint类型。 正式给出c代码的例子是: 其中ImageFileParams是结构类型: 在我的.py文件中,我尝试以这种方 ...

8 将python列表传递给使用ctypes返回数组数据的“c”DLL函数

我想将一个包含字符串数据的 python 列表传递给一个“c”DLL,它处理数据并返回一个包含整数数据的数组。 使用“ctypes”的python代码和c代码是什么。 我总结如下: 我想从 python 脚本传递以下数据,例如: 我希望 DLL 代码应该返回一个整数数组,例如 我已经尝试了 ...

10 如何在Python中使用ctypes加载DLL?

请提供一个示例,说明如何使用Python加载和调用c ++ dll中的函数? 我发现一些文章说我们可以使用“ctypes”来加载并使用Python调用DLL中的函数。 但我无法找到工作样本? 如果有人向我提供如何做的样本会很棒。 ...

2009-11-23 07:08:36 1 7281   python
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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