我用来syscall.Syscall(...)调用 dll 中的 C 方法。
这是 C 方法签名:
SENSEI_API HSENSEI SENSEI_open(const char* sensigrafo, const char* options, SENSEI_ERR* se);
这是SENSEI_ERR结构:
typedef struct
{
int code;
char* error_string;
} SENSEI_ERR;
在我的 GO 程序中,我声明了一个结构:
type senseiErr struct {
code int
error_string *byte
}
并尝试调用该方法:
var nargs uintptr = 3
var err senseiErr
ret, _, callErr := syscall.Syscall(uintptr(senseiOpen),
nargs,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("en"))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(""))),
uintptr(unsafe.Pointer(&err)),
)
正如您可能已经猜到的,该方法用错误的代码和文本SENSEI_open
填充参数。SENSEI_ERR
现在我需要阅读该错误的内容。
err.code
实际上有正确的值。
关于err.error_string
我不知道。我是 GO 新手,有一些问题:
由于 C 结构体有字段char* error_string
,error_string *byte
我的 GO 结构体是否正确?
我应该使用[]byte
还是其他东西?
如何读取该error_string
字段的内容?
fmt.Println(err.error_string)
打印内存地址
fmt.Println(*err.error_string)
始终打印“101”
倚天杖
相关分类