;加载你的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) }
60 queries in 2.220 seconds |