syscall包下的func Syscall疑问

//golang1.3 windows 386
func Syscall(trap, nargs, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) //r1,r2在GoDocServer没查到信息

请问r1,r2,err各代码什么意思?

如果r1是返回值,是否可以返回*string?

共 2 个回复


chenhao

在runtime.h中发现了LibCall定义,r1是表示返回值,但没有r2的注释

struct  LibCall
{
    void    (*fn)(void*);
    uintptr n;  // number of parameters
    void*   args;   // parameters
    uintptr r1; // return values
    uintptr r2;
    uintptr err;    // error number
};

我在调用自己写的dll(返回值是string类型)时,获取返回的string总是报错,代码如下:

fmt.Println(*(*string)(unsafe.Pointer(r1)))
# 0

chenhao

报错原因应该是底层数据类型差异导致: golang的string是struct以len判断结束,c/c++的string是以'\0'表示结束.

# 1