如果我有以下DllImport正在导入非 C# DLL 的 C#,并且我想将其移植到 Go,我将如何做呢?
[DllImport("my.dll", EntryPoint = "Greet", CallingConvention = CallingConvention.Cdecl)]
public static extern int Greet(IntPtr name, ref IntPtr greetings);
Run Code Online (Sandbox Code Playgroud)
我在弄清楚如何将指针传递给参数所需的指针时遇到了问题greetings(我假设因为类型是ref IntPtr,所以我对 C# 一点也不熟悉)。dll 函数将填充我提供的指针指向的内存,我将在后续系统调用中使用该指针。这是我到目前为止所得到的,
package main
import (
"fmt"
"syscall"
"unsafe"
)
var (
MyDll = syscall.MustLoadDLL("my.dll")
greet = MyDll.MustFindProc("Greet")
)
func Greet(name string) error {
nameP, err := syscall.UTF16PtrFromString(name)
if err != nil {
return err
}
// I need to provide a pointer to a pointer for greetings. How …Run Code Online (Sandbox Code Playgroud)