lainline 发表于 2010-4-16 10:03:03

[已解决]autoit 默认语言是什么 发现个奇怪的问题

本帖最后由 lainline 于 2010-4-16 10:14 编辑

返回值是韩国字囧
DllOpen("oleacc.dll")

Local $s=_Acc_GetStateText(1)
MsgBox(0,"",$s)

Func _Acc_GetStateText($dwStateBit,$cchStateBitMax=128);返回状态位对应的解释
        Local $lpszStateBit=DllStructCreate("WCHAR["&$cchStateBitMax&"]")
        $plpszStateBit = DllStructGetPtr($lpszStateBit)
        Local$aResult= DllCall("oleacc.dll","UINT","GetStateText","DWORD",$dwStateBit,"ptr",$plpszStateBit,"UINT",$cchStateBitMax)
        If @error Then Return SetError(1,0,0)
        Return DllStructGetData($lpszStateBit,1)
EndFunc

nmgwddj 发表于 2010-4-16 10:12:20

嘿嘿。确实哦 又意思

lainline 发表于 2010-4-16 10:13:36

找到原因了

DllOpen("oleacc.dll")

Local $s=_Acc_GetStateText(1)
MsgBox(0,"",$s)

Func _Acc_GetStateText($dwStateBit,$cchStateBitMax=128);返回状态位对应的解释
      Local $lpszStateBit=DllStructCreate("WCHAR["&$cchStateBitMax&"]")
      $plpszStateBit = DllStructGetPtr($lpszStateBit)
      Local$aResult= DllCall("oleacc.dll","UINT","GetStateTextW","DWORD",$dwStateBit,"ptr",$plpszStateBit,"UINT",$cchStateBitMax);改成GetStateTextW
      If @error Then Return SetError(1,0,0)
      Return DllStructGetData($lpszStateBit,1)
EndFunc

xiaochuan 发表于 2010-4-16 16:54:31

啥原因啊?:face (31):

pusofalse 发表于 2010-4-16 19:43:00

注意UNICODE与ANSI版本兼容问题,如果某个系统函数中用到了字符串指针,一般这个函数都会有FunctionA和FunctionW两个原型,上例中除了可以把GetStateText改成GetStateTextW外,还可以把wchar改成char,同样可以解决问题。
很多关于中文显示不全或者乱码的问题都是与此有关,而很多人却误认为这是AutoIt的BUG,这果真是一件无聊至极的事情。

dabaiyun 发表于 2010-4-17 08:46:48

厉害呀看看
页: [1]
查看完整版本: [已解决]autoit 默认语言是什么 发现个奇怪的问题