调用NetDiskDLL.dll中的一个函数DES(string instr,string key,ref string outstr,int mode)
其中outstr是引用型参数,在PB中尝试调用成功,但在C#中调用失败,提示"尝试读取或写入受保护的内存,这通常指示其他内存已损坏",如何解决这个问题?请高手指点.

解决方案 »

  1.   

    ref string outstr
    用于传出的字符串不要这样,用预先分配足够内存的StringBuilder
      

  2.   

    DES(string instr,string key,StringBuilder outstr,int mode) 调用之前先分配内存
      

  3.   

    根据楼上所说在调用时作如下修改:
    StringBuilder outstr = new StringBuilder(256);
    string instr = "192168000001001E8C914868";
    string key = "12345678";
    ws_obj_library.ws_trs_library aa = new ws_obj_library.ws_trs_library();
    aa.MYDES(instr, key ,outstr,1);
    出错提示为:
    与“SystemTemplate.ws_obj_library.ws_trs_library.MYDES(string, string, SystemTemplate.ws_obj_library.StringBuilder, int)”最匹配的重载方法具有一些无效参数
    参数“3”: 无法从“System.Text.StringBuilder”转换为“SystemTemplate.ws_obj_library.StringBuilder”根据错误提示,把stringbuilder变量的构造语句改成:
    ws_obj_library.StringBuilder outstr = new SystemTemplate.ws_obj_library.StringBuilder();
    但运行后提示"缓冲溢出",我知道是没有分配内存空间的缘故,于是修改成:
    ws_obj_library.StringBuilder outstr = new SystemTemplate.ws_obj_library.StringBuilder(256);
    出错提示:“StringBuilder”方法没有采用“1”个参数的重载"
    到底应该怎么做?
      

  4.   

    DES(string instr,string key,System.Text.StringBuilder outstr,int mode)