解决方案 »

  1.   

    我觉得有可能是PLC里面设置了string是定长的:string(32) 的问题
    那么我在
    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 300, ArraySubType=UnmanagedType.BStr)]
                public string[] CodeTxt = new string[300];这一句时改为 
                publicStringBuilder[ CodeTxt = new StringBuilder[300];时,如何设置StringBuilder[]的定长为32呢?
      

  2.   

    这个问题,你应该问PLC厂家要通信协议啊
    自己瞎猜?
      

  3.   

    我有ADS通信资料,但是里面只有除string[]外其它所有类型的资料,独独没有string[]的,同样的结构体用int[]、char[]实现起来都没有问题,就是string[]出错单独一条一条的读,用string变量接收没有问题,但是300条……太多了!要写300个句柄!
      

  4.   

    CodeTxt: ARRAY [1..300] OF STRING(32);
    ---------
    32在哪儿?
      

  5.   


    这是PLC程序中的语句,是给STRING设置定长。这段程序是通过ADS通讯从PCL程序里读取数据,C#里的STRING不是变长的么?如果要在C#里设置字符数定长的string[]要怎么设置?
      

  6.   


    大神,我好多提问都是你回答的,再问个问题呗,如果要在C#里设置字符数定长的string[]要怎么设置?比如:一个字符串数组有300个变量,每个字符串变量固定长度32个字符。
      

  7.   

    C#里字符串是变长的,因为字符串变量是个引用类型
    在C++里,字符串和字符数组是可以通用的,C#不可以,但是可以用函数转换
    你可以定义长度为32的字符数组,然后把它转换成字符串
      

  8.   


    你的意思是string[]  st=new string[32]{"123","234","555"……(32个)}然后把它变成字符串,这我会。
    我的意思是string[] st= new string[300]{"123456……32",“123456……32”,……(300个32个字符的字符串)}