想用C# 做一动态库 比如有下面这样的一个函数声明 public int ID(int hScan,int len,  byte[] Buffer, nCounter);
 {
    ....
  }
   
 函数执行完成后,得到三个值,分别存在 int hScan,int len,  byte[] Buffer 这三个变量里 当在应用程序里调用这个函数时,可以不如下这么用?
 res = Program.ID(hScan, len, IDBuffer, nCounter);
                    if (res == OK)
                    {
                        for (i = 0; i < nCounter; i++)
                        {                            
                           temp = Buffer[len] * 2 + 1;
                         }
                     }
 也就是DLL 文件里函数执行完成后, 返回值都存在 函数的形参里 然后在调用DLL 时,,也可以直接用 要这么做,需要注意哪些?
 谢谢

解决方案 »

  1.   

    gg :ref  out 的使用和区别
      

  2.   

    想调用的直接用就用out吧
    public int ID(out int hScan,out int len,out byte[] Buffer, nCounter);
     {
      ....
      }
      

  3.   

    ref和out都可以,只是在用于返回值的时候out不需要初始化,能方便一些。
      

  4.   

    谢谢各位 
     再描述一下  比如,,VC写的DLL 
        public int ID(HANDLE * hScan,int len, byte * Buffer, int * nCounter);  在.NET 环境调用 ID 函数,,执行过后,,  上面的函数里,,有三个形参的值,是函数执行过后,三个形参保留值了
      在C#里,,再声明三个变量,,带入上面的函数,,
      
       上面函数的三个形参的值将 填入 在C#里声明的三个变量中去  
      

  5.   

    刚试了下,各位的方法  public void ShowMessage( out int a,out byte[] buffer,out int nCounter)
            { 
                a = 10;
                buffer[0] = 0xff;
                nCounter = 2;
               
            }out byte[] buffer 这第二个参数报错去掉这个参数,,函数声明就正常,,,在调用这个函数时,也是OK 的,,和上面描述的效果一样想要形参里有一个字节数组参数,,应该如何弄? 
    谢谢
      

  6.   


    数组传本身就是引用,不需要再加out
      

  7.   

    不好意思,希望没有误导你,
    一时忘了,数组本身就是引用类型的,
    不用out,
    你在方法外部直接声明一个数组类型,直接调用就行了,关于值类型和引用类型,可以看看MSDN:
    值类型和引用类型:
    http://msdn.microsoft.com/zh-cn/library/t63sy5hs(VS.80).aspx常规类型系统:
    http://msdn.microsoft.com/zh-cn/library/zcx1eb1e.aspx