dll中的一个函数
int read_standard(char rbuf[])                 
     说明:读当前重量
     参数:char rbuf[]  --- 字符数组,存放返回的数据,要求不小于18字节那c#中对应的char rbuf[]用什么类型去调用呢。
我尝试了用string类型调用,但得不到返回值。
用了stringbuilder调用,得到的返回值是乱码

解决方案 »

  1.   

                byte[] rbuf= new byte[100];
                read_standard(rbuf);
              string str=System.Text.Encoding.Default.GetString(rbuf);看str得值 
      

  2.   

    如果返回的是字符就用StringBuilder,如果返回的是二进制数据就用[out] byte[]。
      

  3.   

    char rbuf[]是字符数组,DLL里改变rubf的值,在外面调用时,   
               byte[] rbuf= new byte[100]; 
                read_standard(rbuf); 
    希望这里面的read_standard(rbuf); rbuf能把dll里的char rbuf传出来。
              
      

  4.   

    你传char rbuf[]字符数组,DLL里改变rubf的值,在外面调用后char rbuf[]字符数组里的内容就是DLL修改过后的值了,因为传数组实际上是传的数组的首地址进去的。你有像我那样测试过吗?
      

  5.   

    这样定义:
    [DllImport("xxx.dll")]
    static extern int read_standard([Out] byte[] rbuf);
      

  6.   

    支持7楼的但我用的是string,也可以,能够得到返回值呢
      

  7.   

     class Class1
        { [DllImport("pos_ad_dll.dll", CharSet = CharSet.Auto)]
          public static extern int read_standard(ref byte []szRecvBuf);
        }后面调用的是:
      try
                {
                    
                    int nErrorCode = Class1.read_standard(ref byte szResult);                if (nErrorCode == 0xF0)
                        sTestResult = "Success";
                    else
                        sTestResult = "Fail";
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    sTestResult = "Fail";
                }编译通不过,提示无效的表达式顶byteDLL中的函数说明
    1. int read_standard(char rbuf[])                 
         说明:读当前重量
         参数:char rbuf[]  --- 字符数组,存放返回的数据,要求不小于18字节
         返回:>0xf0  错误   
           =0xf0  正确
    (注:返回值为16进制表示的正数,C++表示为0xf0,Delphi表示为$f0,下同)
         举例:int xbuf[18];   
               ret=read_standard(xbuf);
         显示格式:
               xbuf[0]: 指示灯标志位
    bit0:表示第一位稳定灯,如为1则稳定灯亮,否则不亮;
    bit1:表示第二位零位灯,如为1则零位灯亮,否则不亮;
    bit2:表示第三位去皮灯,如为1则零位灯亮,否则不亮;   
               xbuf[1]-xbuf[7]: ASCII码,重量值(Kg),带小数点和正负号
       xbuf[8]: ‘P’,表示皮重的开始位置
    xbuf[9]-xbuf[16]: ASCII码,皮量值(Kg),带小数点和正负号
      

  8.   

    int nErrorCode = Class1.read_standard(ref zResult); 
      

  9.   

    byte[] szRecvBuf=new byte[18];
    int nErrorCode = Class1.read_standard(ref szResult); 先初始化byte数组,让其长度不少于18,再调用函数.
      

  10.   

    谁帮我写个能禁止进程结束的VC  DLL啊 最好C# 能调用