Attack1.cs文件中调用Reader1.cs文件中的OpenPort函数。
Reader1 UHFReader1 = new Reader1();
int CntSin = 0;
int CntMul= 0;
int Port = 1;
byte Comadr = 0xff;
byte Band = 0x01;
int FrmHandle = 0;
bool OpenPortFlag = UHFReader1.OpenPort(Port, Comadr, Band, FrmHandle); //打开端口
if (true == OpenPortFlag){
Console.WriteLine("打开端口成功!");
}
else{
Console.WriteLine("打开端口失败!");
return 0;
}
Reader1.cs文件:
public bool OpenPort(int Port, byte Comadr, byte Band, int FrmHandle) //从实参传到形参,但是在本方法结束后FrmHandle的值还是会释放掉,对调用的函数来说FrmHandle仍然为0
{
int open = OpenComPort(Port, ref Comadr,ref Band,out FrmHandle);//虽然这里输出参数,FrmHandle为其它值(比如为1),但没有返回给Attack1.cs的调用函数
if (0 == open)
{
return true;
}
else
{
return false;
}
}
修改Reader1.cs
public bool OpenPort(int Port, byte Comadr, byte Band, out int FrmHandle)
{
int FrmHandle2 = -1;
int open = OpenComPort(Port, ref Comadr, ref Band, out FrmHandle2);
FrmHandle = FrmHandle2;
if(0 == open)
{
return true;
}
else
{
return false;
}
}
FrmHandle2赋值给FrmHandle,在声明的调用中使用了out修饰符,输出参数像引用参数,输出参数的形参充当担当实参
的别名,形参和实参都是同一内存位置的名称,方法内对形参的任何改变在方法之后通过实参变量都是可见的。FrmHandle
就能正常返回输出参数了。
参考资料:
1.C#图解教程 P58