如果我将returncode=RCODE(mycode);
改成
string str;
returncode=RCODE(str);
又说参数不能转变

解决方案 »

  1.   

    vc的函数是这样定义的
    extern "C" __declspec(dllexport) int PASCAL RCODE(char code[7]);
    我用vb.net和vc
    都能调了
    怎么c#就不行了
      

  2.   

    ==》
    unsafe

    {
        char[] mycode=new char[7];
        returncode=RCODE(&mycode);
     }
    当然RCODE函数要做相应的改动。
      

  3.   

    extern "C" __declspec(dllexport) int PASCAL RCODE(char code[7]);
    ==》
    extern "C" __declspec(dllexport) int PASCAL RCODE(char* code);
      

  4.   

    unsafe

    {
        char[] mycode=new char[7];
        returncode=RCODE(&mycode);
     }
    这里通不过:C:\Documents and Settings\Administrator\桌面\test1\Form1.cs(1386): 参数“1” : 无法从“char[]*”转换为“char*”
      

  5.   

    另外extern "C" __declspec(dllexport) int PASCAL RCODE(char code[7]);
    不改有没有方法,因为我在vb.net和vc中都能调用
    而且dll是别人写好的
    我不能改
      

  6.   

    用你的方法出现三个错误:
    1.C:\Documents and Settings\Administrator\桌面\test1\Form1.cs(1386): 与“test1.Form1.RCODE(char[])”最匹配的重载方法具有一些无效参数
    2.C:\Documents and Settings\Administrator\桌面\test1\Form1.cs(1386): 参数“1” : 无法从“char[]*”转换为“char[]”
    3.C:\Documents and Settings\Administrator\桌面\test1\Form1.cs(1386): 无法获取托管类型(“char[]”)的变量地址或大小因为我无法修改dll的函数定义
      

  7.   

    ==》试试,RCODE不改:
    unsafe

    {
        char[] mycode=new char[7];
        returncode=RCODE(mycode);
     }
      

  8.   

    sorry,写错了。unsafe

    {
        char[] mycode=new char[7];
        returncode=RCODE(&mycode[0]);
     }
      

  9.   

    returncode=RCODE(ref mycode);
      

  10.   

    returncode=RCODE(out mycode);
      

  11.   

    这些方法都不行
    不过我已经解决了
    用sting做参数传递
    用stringbuild给string 分配空间就行了
      

  12.   

    是啊,总之是传进去的东西一定要是可修改的(vc dll可访问的指针),不能简单传值。你的解决方法很好。
      不好意思,因为没时间去实际测试,没能帮上你!