gpt4 book ai didi

python - 将 DLL 与 python 和 ctypes 一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:03 25 4
gpt4 key购买 nike

我想为我的 python 项目使用 DLL (ImageSearch.dll)。它最初是为 autoit 开发的。这是 au3 文件:

Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

; If error exit
if $result[0]="0" then return 0

; Otherwise get the x,y location of the match and the size of the image to
; compute the centre of search
$array = StringSplit($result[0],"|")

$x=Int(Number($array[2]))
$y=Int(Number($array[3]))
if $resultPosition=1 then
$x=$x + Int(Number($array[4])/2)
$y=$y + Int(Number($array[5])/2)
endif
return 1
EndFunc

所以我尝试使用 ctypes,但在获取变量“结果”时遇到问题。事实上,在下面的脚本中,searchReturn 的值为 c_char_p(b'0'),而使用 autoit 脚本时,我有一个带有“|”的字符串里面。

from ctypes import *

ImageSearchDLL = windll.LoadLibrary("ImageSearchDLL")
ImageSearch = ImageSearchDLL.ImageSearch
searchReturn = c_char_p(ImageSearch(0,0,1919,1079,'myPic.bmp'))

print(searchReturn)

我还尝试使用 c_int 等传递参数,这导致了同样的问题。如果我不使用 c_char_p(),我有一个 int。我不明白为什么我得到一个 int,标题显示它应该返回一个 str。

最佳答案

好吧,我认为我应该使用 cdll,但经过多次尝试并用好方法定义参数后,我解决了我的问题。谢谢 cdarke 的帮助:)

这是最终的脚本:

import ctypes

dllFunc = ctypes.windll.LoadLibrary('ImageSearchDLL.dll')
dllFunc.ImageSearch.argtypes = (ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_char_p,)
dllFunc.ImageSearch.restype = ctypes.c_char_p

_result = dllFunc.ImageSearch(0, 0, 1920, 1080, b"myPic.bmp")
print(_result.decode('utf-8'))

关于python - 将 DLL 与 python 和 ctypes 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29944187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com