我们设计了C / C ++ DLL:
WIN32_DLL_EXPORT int FnRetInt(int i)
{
....
return 32 ;
}
WIN32_DLL_EXPORT char* FnRetString()
{
return "THIS IS A TEST STRING" ;
}
当我们使用syscall:{/ p>在Go
中调用这两个函数时
hd:=syscall.NewLazyDLL(dll_path)
proc:=hd.NewProc(dll_func_name)
ret:=proc.Call()
我们发现:
FnRetInt
工作正常,但FnRetString
没有。 proc.Call
返回类型为uintptr
,我们如何将其更改为我们想要的类型(例如:char *或string)?
答案 0 :(得分:2)
uintptr
是表示指针的Go类型。您可以使用unsafe
包并将其转换为unsafe.Pointer
,然后您可以将unsafe.Pointer
转换为任何Go指针类型。所以你可以做类似
str := (*uint8)(unsafe.Pointer(ret))
获得*uint8
。
答案 1 :(得分:1)
查看syscall.Getwd windows implementation http://code.google.com/p/go/source/browse/src/pkg/syscall/syscall_windows.go#323。它与您的问题不同:
但是应该给你足够的线索。
亚历