猿问

如何从用C / C ++编写的DLL调用导出的函数,其返回类型为char *或string?

我们像这样设计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)?


慕无忌1623718
浏览 274回答 2
2回答

慕桂英4014372

Auintptr是代表指针的Go类型。您可以使用unsafe包并将其转换为unsafe.Pointer,然后可以将转换unsafe.Pointer为任何Go指针类型。所以你可以做类似的事情str := (*uint8)(unsafe.Pointer(ret))得到*uint8回报。
随时随地看视频慕课网APP

相关分类

Go
我要回答