我们像这样设计C / C ++ DLL:WIN32_DLL_EXPORT int FnRetInt(int i){ .... return 32 ;} WIN32_DLL_EXPORT char* FnRetString(){ return "THIS IS A TEST STRING" ;}当我们Go使用syscall调用这两个函数时:hd:=syscall.NewLazyDLL(dll_path)proc:=hd.NewProc(dll_func_name)ret:=proc.Call()我们发现:FnRetInt工作正常,但FnRetString没有。proc.Call返回类型是uintptr,我们如何将其更改为所需的类型(例如exchar:char *或string)?
2 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
Auintptr
是代表指针的Go类型。您可以使用unsafe
包并将其转换为unsafe.Pointer
,然后可以将转换unsafe.Pointer
为任何Go指针类型。所以你可以做类似的事情
str := (*uint8)(unsafe.Pointer(ret))
得到*uint8
回报。
- 2 回答
- 0 关注
- 273 浏览
添加回答
举报
0/150
提交
取消