簡體   English   中英

如何從用C / C ++編寫的DLL中調用導出的函數,返回類型是char *還是string?

[英]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 它與您的問題不同:

  • 它將緩沖區傳遞給dll,而不是從dll接收它;
  • 數據是uint16s(Microsoft WCHAR),而不是uint8s;
  • GetCurrentDirectory告訴我們結果字符串的長度,而你的例子可能希望你在結尾搜索0;

但應該給你足夠的線索。

亞歷克斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM