[英]How to invoke an exported function from DLL written in C/C++ which return type is char* or 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
調用這兩個函數時:
hd:=syscall.NewLazyDLL(dll_path)
proc:=hd.NewProc(dll_func_name)
ret:=proc.Call()
我們找到:
FnRetInt
運行正常,但FnRetString
沒有。 proc.Call
返回類型是uintptr
,我們如何將其更改為我們想要的類型(例如:char *或string)?
uintptr
是表示指針的Go類型。 您可以使用unsafe
包並將其轉換為unsafe.Pointer
,然后您可以將unsafe.Pointer
轉換為任何Go指針類型。 所以你可以做點什么
str := (*uint8)(unsafe.Pointer(ret))
得到一個*uint8
。
查看syscall.Getwd windows實現http://code.google.com/p/go/source/browse/src/pkg/syscall/syscall_windows.go#323 。 它與您的問題不同:
但應該給你足夠的線索。
亞歷克斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.