你需要看dll里的函数声明到底是什么
如果你重新声明的参数跟dll里的不一样,调用出错很正常

解决方案 »

  1.   

    既然是output,你用out关键字试试,不要用ref
      

  2.   

    我用out 试过, ref 试过 ,都不用也试过
      

  3.   

    结构加上 CharSet 属性,并且使用多字节的。
    导出的方法不需要的。
      

  4.   

    看看是不是字节对齐的问题
    试下这个
     
     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
      

  5.   


    Charset属性我试过,Ansi ,Auto ,Unicode都不行
      

  6.   

            [DllImport("Client.dll", EntryPoint = "MisInterface")]
            private static extern int MisInterface(ref ccb_in_struct inputData, ref ccb_out_struct outputData);
     
            [StructLayout(LayoutKind.Sequential, CharSet=Ansi)]
            public struct ccb_out_struct另外一个结构类似。
      

  7.   

    你这个肯定不对。
    char对应的是byte你用string肯定不行。
      

  8.   

    两个 ref 都加上了吗?
      

  9.   

    两个 ref 都加上了吗?
      

  10.   

    两个 ref 都加上了吗?
      

  11.   

    ccb_out 这个变量,每一个字段,要分配对应的数据。
    换句话说: rspCode这些字段,要赋值,可以生成空的数据。
    你不分配内存,传入C++中,就是NULL,就会出现这个问题。
      

  12.   


    我用byte[] 也试过的,一样的
      

  13.   

    System.Runtime.InteropServices.Marshal.StructureToPtr
    转一下再传入,系统多少位的,软件多少位,dll多少位
      

  14.   

    我的问题解决了!但我至今还没想通!正如  Saleayas  说的两个参数都要加ref ,可是一个是传入参数,加ref有什么用呢?感谢各位的热情帮助 ,Saleayas 给您一半分数,其他有参考价值的我也适当分配些!感谢各位!