C#动态链接库函数OUT参数返回问题
时间:2011-05-07 来源:viperchaos
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
相关阅读 更多 +