日期:2014-05-18  浏览次数:20855 次

C#,如何在函数的参数里填写返回值?


C# 里如何实现,下面C的功能呢?
即将封装的函数GetID里 读取到的数据,填写到该封装函数的参数里


C/C++ code

apiReturn _stdcall GetID(SOCKET hSocket, BYTE *ID)
{
    BYTE put[MAX_PACKET_LEN];
    BYTE get[MAX_PACKET_LEN];
        
    put[0]=0x02;    // 
    put[1]=0x14;    // 
    put[2]=0;

    if (!Packet(hSocket,put,get))
        return _net_error;
    memcpy(ID, &get[1], 12);

    return _OK;
}



------解决方案--------------------
GetID(SOCKET hSocket, ref byte ID)
{
ID=xxx;
}
------解决方案--------------------
out
------解决方案--------------------
ref out 这两个关键字,MSDN查查吧
------解决方案--------------------
publib void GetID(out string id)
{
id=string.empty;
id="testString";
}
------解决方案--------------------
ref和out的差别,
ref 在传参之前必须赋值
out 传参之前不需要赋值,但必须在函数内部为其赋值。

int a = 0;
Func(ref a);//可以
int a;
Func(ref a); //不可以
int a;
Func (out a);
Func(out a)
{
a =0;//必须在内部为其赋值
}

一般跟C函数中指针对应的都用ref,因为在传递指针的时候肯定不能给个空指针,给空指针你根本就没法处理了。