Thinkai's Blog

Autohotkey|Python|php|aardio|VOIP|IT 爱好者

;加载你的dll 注意像下面这种文件名里面有多个点的写全文件名
hModule := DllCall("LoadLibrary", "Str", "time.cqp.dll", "Ptr")
;无参数类型返回字符串
;Ptr1 := DllCall("time.cqp.dll\info") ;返回指针
;带参数类型返回字符串
;注意一定要用numput,不然指针飞了报0x0000005的错
;长度自己定好
VarSetCapacity(p1,3),VarSetCapacity(p2,3),VarSetCapacity(p3,3),VarSetCapacity(p4,3)
numput(0x313233,p1),numput(0x343536,p2),numput(0x373839,p3),numput(0x404142,p4)
;注意这里指针一定要用&变量的格式传入指针 参数记得写全 不然报错-4
Ptr2 := DllCall("time.cqp.dll\plugmain","Ptr",&p1,"Ptr",&p2,"Ptr",&p3,"Ptr",&p4,"Ptr",&p4)
Error := ErrorLevel ;保存错误值
Str = ;初始输出字符串变量
Loop
{
	UChar := NumGet(0+Ptr2,A_index-1,"UChar")
	if (UChar=0x0) ;以0结束
		break
	Str .= Chr(UChar)
}
MsgBox % Str "`n" Error

从AHK_L 46+开始增加了StrPut()和StrGet()来读取写入字符串到内存。

hModule := DllCall("LoadLibrary", "Str", "time.cqp.dll", "Ptr")
StrPutVar("你",p1),StrPutVar("是",p2),StrPutVar("谁",p3),StrPutVar("啊",p4),StrPutVar("?",p5)
Ptr2 := DllCall("time.cqp.dll\plugmain","Ptr",&p1,"Ptr",&p2,"Ptr",&p3,"Ptr",&p4,"Ptr",&p5)
Error := ErrorLevel ;保存错误值
MsgBox % StrGet(Ptr2) "`n" Error

StrPutVar(string, ByRef var, encoding:="")
{
    ; 确定容量.
    VarSetCapacity( var, StrPut(string, encoding)
        ; StrPut 返回字符数, 但 VarSetCapacity 需要字节数.
        * ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) )
    ; 复制或转换字符串.
    return StrPut(string, &var, encoding)
}



来了就留个评论吧! 4个评论




友情链接:Autohotkey中文帮助Autohotkey官网Autohotkey中文网联系作者免GooglePlay APK下载

 主题设计 • skyfrit.com  Thinkai's Blog | 保留所有权利

60 queries in 2.220 seconds |