gaoan000 发表于 2015-12-9 19:36:53

怎么获取DLL生成的指针(比较特殊)

首先DLL的一个函数原型
PassThruOpen
(
void *pName
unsigned long *pDeviceID
)

关键在于参数*pDeviceID 说明文档上写的是
"Pointer ro location for the device ID that is assigned by the DLL"
   这个指针就是调用函数时DLL自行分配的 这个函数打开后别的函数才有效
   想了很久也不知道怎么获取有没有做过类似的大神解答下 谢谢

ceoguang 发表于 2015-12-10 11:27:03

假定PassThruOpen返回值为BOOL类型Local $tStruct = DllStructCreate('char')
DllStructSetData($tStruct,1,'name')
Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','ptr',DllStructGetPtr($tStruct),'ULONG*',0)$aResult就是你要的指针

ceoguang 发表于 2015-12-10 11:31:37

查了一下,根据http://www.drewtech.com/support/J2534/PassThruOpen.html这页面的代码
AU3的代码看起来应该是这样的Local $aResult = DllCall('xx.dll','long','PassThruOpen','ptr',0,'ULONG*',0)你要的指针同样是在$aResult

车技一流 发表于 2015-12-10 14:58:48

新手入门 学习了

gaoan000 发表于 2015-12-10 19:37:20

回复 2# ceoguang

唉 感觉全乱套了 DllstructCreate 这个函数帮主文档里不是限定参数要为字符串吗 'char' 不明白啊 可以解释下吗 接触这个不久 很多地方都不熟悉啊

gto250 发表于 2015-12-10 20:47:40

回复 5# gaoan000

DllstructCreate创建的是一个数据结构
你可以买本p版的dllcall的书看看
关于dllcall和DllstructCreate他那本书里写的很清楚

ceoguang 发表于 2015-12-11 14:19:13

回复ceoguang

唉 感觉全乱套了 DllstructCreate 这个函数帮主文档里不是限定参数要为字符串吗 'char[ ...
gaoan000 发表于 2015-12-10 19:37 http://www.autoitx.com/images/common/back.gifLocal $tStruct = DllStructCreate('char')
DllStructSetData($tStruct,1,'name')
Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','ptr',DllStructGetPtr($tStruct),'ULONG*',0)
等同于
Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','str','name','ULONG*',0)
这样能明白么?

gaoan000 发表于 2015-12-13 10:50:02

回复 7# ceoguang

多谢版主的回复明白了 谢谢

gaoan000 发表于 2015-12-14 19:18:23

回复 7# ceoguang

还有 我在P版淘宝店订了书 都好几天了还没发货 掌柜的也不在 可以的话能帮我联系下吗?

ceoguang 发表于 2015-12-16 13:10:07

回复 9# gaoan000
已帮你联系

gaoan000 发表于 2015-12-22 17:59:49

回复 10# ceoguang

昨天终于收到了 感谢热心的版主

gaoan000 发表于 2015-12-22 18:51:36

回复 10# ceoguang

对了 还有个问题想请教下 从dll里函数返回的指针比如Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','ptr',DllStructGetPtr($tStruct),'ULONG*',0)第二个参数传进去后函数会给分配一个数值到指定的地址 直接输出只是地址值

ceoguang 发表于 2015-12-22 21:21:02

回复 12# gaoan000

有址址了直接就可以读啊

gaoan000 发表于 2015-12-31 17:57:38

回复 13# ceoguang

所有的函数都调用成功了 最后再厚脸皮请教一下 自己编写的函数文件被调用时怎么自动显示那些参数 函数名之类的例如
#include <Array.au3>

_Array(...)   在输入_号后会有很多已经写好的函数可以选择 选入参数时候又有选择提示
怎么弄上去的啊
我知道已经问的很多了 但是可以再帮忙一下吗?

ddrs 发表于 2016-1-8 01:22:36

查了一下,根据http://www.drewtech.com/support/J2534/PassThruOpen.html这页面的代码
AU3的代码看起来应该是这样的
页: [1]
查看完整版本: 怎么获取DLL生成的指针(比较特殊)