This is a created article in which the information may have evolved or changed.
When you start passing a string argument to a DLL function, always go always reports a memory overflow,
String Conversion Method:
Func StrPtr (s string) UIntPtr {
Return UIntPtr (unsafe. Pointer (Syscall. Stringtoutf16ptr (s)))
}
Tangled for a long time, and then went to the Golang community to find information, someone suggested using pointers,
Func (b *bangwei) Wirtelock (lockdata lockdata) int {
Buff:=lockdata.no//define parameter rules
WB: = Syscall. Newlazydll ("Bwusbapi.dll")//Load DLL Load DLL method in the Golang community, there are many, like two or three kinds,
Stwritedata: = WB. Newproc ("St_wrkeycard")//Load function
Time. Sleep (1000)//due to the handling of loading hardware involved, so pause for a second, if not paused, I find there will be errors
ENC: = Mahonia. Newencoder ("GBK")
Output: = Enc. Convertstring (Buff)//Character conversion
A: = []byte (Output)
p:=&a[0]//string to byte pointer
Ret,_,err: = Stwritedata.call (Util.intptr), uintptr (unsafe. Pointer (P)))//Call
Wb=nil
Stwritedata=nil//Release resources
If err! = Nil {
Fmt. Println (Err. Error ())
}
return int (ret);
}
This allows the DLL to be called successfully
If anything is wrong, please correct me.