找回密码
 加入
搜索
查看: 3566|回复: 14

[系统综合] 怎么获取DLL生成的指针(比较特殊)

  [复制链接]
发表于 2015-12-9 19:36:53 | 显示全部楼层 |阅读模式
首先DLL的一个函数原型
PassThruOpen
(
void *pName
unsigned long *pDeviceID
)

关键在于参数*pDeviceID 说明文档上写的是
  "Pointer ro location for the device ID that is assigned by the DLL"
   这个指针就是调用函数时DLL自行分配的 这个函数打开后别的函数才有效
   想了很久也不知道怎么获取  有没有做过类似的大神解答下 谢谢
发表于 2015-12-10 11:27:03 | 显示全部楼层
假定PassThruOpen返回值为BOOL类型
Local $tStruct = DllStructCreate('char[260]')
DllStructSetData($tStruct,1,'name')
Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','ptr',DllStructGetPtr($tStruct),'ULONG*',0)
$aResult[2]就是你要的指针
发表于 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[2]
发表于 2015-12-10 14:58:48 | 显示全部楼层
新手入门 学习了
 楼主| 发表于 2015-12-10 19:37:20 | 显示全部楼层
回复 2# ceoguang

唉 感觉全乱套了 DllstructCreate 这个函数帮主文档里不是限定参数要为字符串吗 'char[260]' 不明白啊 可以解释下吗 接触这个不久 很多地方都不熟悉啊
发表于 2015-12-10 20:47:40 | 显示全部楼层
回复 5# gaoan000

DllstructCreate创建的是一个数据结构
你可以买本p版的dllcall的书看看
关于dllcall和DllstructCreate他那本书里写的很清楚
发表于 2015-12-11 14:19:13 | 显示全部楼层
回复  ceoguang

唉 感觉全乱套了 DllstructCreate 这个函数帮主文档里不是限定参数要为字符串吗 'char[ ...
gaoan000 发表于 2015-12-10 19:37
Local $tStruct = DllStructCreate('char[260]')
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)
这样能明白么?
 楼主| 发表于 2015-12-13 10:50:02 | 显示全部楼层
回复 7# ceoguang

多谢版主的回复  明白了 谢谢
 楼主| 发表于 2015-12-14 19:18:23 | 显示全部楼层
回复 7# ceoguang

还有 我在P版淘宝店订了书 都好几天了还没发货 掌柜的也不在 可以的话能帮我联系下吗?
发表于 2015-12-16 13:10:07 | 显示全部楼层
回复 9# gaoan000
已帮你联系
 楼主| 发表于 2015-12-22 17:59:49 | 显示全部楼层
回复 10# ceoguang

昨天终于收到了 感谢热心的版主
 楼主| 发表于 2015-12-22 18:51:36 | 显示全部楼层
回复 10# ceoguang

对了 还有个问题想请教下 从dll里函数返回的指针  比如
Local $aResult = DllCall('xx.dll','BOOL','PassThruOpen','ptr',DllStructGetPtr($tStruct),'ULONG*',0)
第二个参数传进去后函数会给分配一个数值到指定的地址 直接输出只是地址值
发表于 2015-12-22 21:21:02 | 显示全部楼层
回复 12# gaoan000

有址址了直接就可以读啊
 楼主| 发表于 2015-12-31 17:57:38 | 显示全部楼层
回复 13# ceoguang

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

_Array(...)   在输入_号后会有很多已经写好的函数可以选择 选入参数时候又有选择提示
怎么弄上去的啊  
我知道已经问的很多了 但是可以再帮忙一下吗?
发表于 2016-1-8 01:22:36 | 显示全部楼层
查了一下,根据http://www.drewtech.com/support/J2534/PassThruOpen.html这页面的代码
AU3的代码看起来应该是这样的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-10 16:38 , Processed in 0.094067 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表