找回密码
 加入
搜索
查看: 3117|回复: 9

[AU3基础] DLLSTATUS getdllstatus(void) 如何转换成AU3?

  [复制链接]
发表于 2010-9-13 12:37:25 | 显示全部楼层 |阅读模式
DLLSTATUS getdllstatus(void) 如何转换成AU3?

相关帖子

发表于 2010-9-13 18:54:15 | 显示全部楼层

$iDllStatus = DllCall("SomeDll.dll", "dword", "getdllstatus")
MsgBox(0, "Result:", $iDllStatus[0])
 楼主| 发表于 2010-9-13 19:21:11 | 显示全部楼层
DLL文件如下:
我用:
$DLLStatus = DllCall($DLLFiles, "dward", "getdllstatus")


根本无返回值.

函数说明:
DLLSTATUS getdllstatus(void) 戻り値
pcidebug.dllの動作状態
DLLSTATUS_NOERROR 正常動作中,
DLLSTATUS_DRIVERNOTLOADED デバイスドラーバ-がロードできなかったため動作していない状態。
DLLSTATUS_NOTSUPPORTEDPLATFORM サポートされてないプラットフォームで実行されている。動作していない状態。x86 Windows NT,Windows95/98以外のOSだとこのエラーを返す
DLLSTATUS_OTHERERROR その他何らかのエラーにより正常に動作していない 
 引数
なし 
 機能
pcidebug.dllの状態を調べる。pcidebug.dllの関数を利用する前に一度この関数を呼び出してDLLSTATUS_NOERRORであることを確認する。DLLSTATUS_NOERROR以外の状態の場合はpcidebug.dllの機能は使用できない。 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-9-13 19:23:18 | 显示全部楼层
具体的其他函数在:  http://www.otto.to/~kasiwano/toppage11.htm

也无法调用~~
 楼主| 发表于 2010-9-13 19:27:49 | 显示全部楼层
本帖最后由 hanz_200 于 2010-9-13 19:30 编辑

比如说这个函数:
ULONG _pciFindPciClass(UCHAR baseclass, UCHAR subclass, UCHAR programif, ULONG index)
无法得到返回值
$gAddress=$Address=DllCall($DLLFiles, "ulong", "_pciFindPciClass", "uchar", 0x06, "uchar", 0x00, "uchar", 0x00,"ulong",0)
$Data = DllCall($DLLFiles, "ulong", "_pciConfigReadLong", "ulong", BitShift($Address,16), "ulong", 0)
$NorthVendorID=$Data&0x0000FFFF
求P大帮忙 ~~
发表于 2010-9-13 19:42:13 | 显示全部楼层
把uchar改成ubyte,AU3中没有uchar。另外DllCall函数返回的是数组。
$gAddress=$Address=DllCall(...) 这句什么意思?之前声明$Address变量了吗?没有的话直接出错退出,有声明的话,$gAddress永远都是False,除非DllCall出错。
 楼主| 发表于 2010-9-13 20:17:29 | 显示全部楼层
本帖最后由 hanz_200 于 2010-9-16 13:43 编辑

谢谢P大的帮助~
 楼主| 发表于 2010-9-14 13:24:22 | 显示全部楼层
本帖最后由 hanz_200 于 2010-9-14 13:27 编辑

这个如何转换成AU3:
#define pciBusDevFunc(Bus,Dev,Func)                ((Bus&0xff)<<8)|((Dev&0x1f)<<3)|(Func&7)
这样对吗?
Func PciBusDevFunc($Bus,$Dev,$Func)
        Return BitOR(BitShift($Bus&0xFF,-8),BitShift($Dev&0x1F,-3),$Func&7)
EndFunc
发表于 2010-9-14 14:42:51 | 显示全部楼层
楼主兄在7#的回复,基本让我觉得我在2#和6#的回复完全是在浪费时间,当然这个回复也是。
无法得到结果?怎么得不到啊?你的测试代码呢?你的测试环境?你只有一句“无法得到结果”,完全会让回答者觉得你是一个loser,真的。
 楼主| 发表于 2010-9-16 13:21:19 | 显示全部楼层
这是个C源码:
 gAddress=address = _pciFindPciClass(0x06,0x00,0x00,0);
data = _pciConfigReadLong(address >> 16 ,0);
NorthVendorID = data & 0x0000FFFF;
NorthDeviceID = (data & 0xFFFF0000) >> 16;
这个是转换之后的代码:
$DLLFiles=DllOpen("pcidebug.dll")
Dim $Address,$Data
$gAddress=DllCall($DLLFiles, "ulong", "_pciFindPciClass", "ubyte", 0x06, "ubyte", 0x00, "ubyte", 0x00,"ulong",0)
$Address=$gAddress[0]
$Data = DllCall($DLLFiles, "ulong", "_pciConfigReadLong", "ulong", BitShift($Address,16), "ulong", 0)
$NorthVendorID=BitAND($Data[0],0x0000FFFF)
$NorthDeviceID=BitShift($Data[0]&0xFFFF0000,16)
一直都无法得到正确的值,请教P大,麻烦了,菜鸟晕啊~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 22:04 , Processed in 0.078972 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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