[DllImport("c:\\windows\\icbc\\MposCore.dll", CharSet = CharSet.Ansi)]
        [return: MarshalAs(UnmanagedType.BStr)]
        public static extern string DoSale([MarshalAs(UnmanagedType.LPTStr)] string track2, [MarshalAs(UnmanagedType.LPTStr)]string track3,
            int amount, [MarshalAs(UnmanagedType.LPTStr)]string opreno, [MarshalAs(UnmanagedType.LPTStr)]string bitmap58, [MarshalAs(UnmanagedType.LPTStr)]string bitmap59);我这么写,但是传过去的opreno还是只有1位,为什么?

解决方案 »

  1.   


    你好,我用string传进去,c那边只能得到第一位
      

  2.   


    BSTR DoSale(LPCTSTR track2, LPCTSTR track3, long amount, LPCTSTR operno, LPCTSTR bitmap58, LPCTSTR bitmap59);
      

  3.   

    const char[]          通常是这个
    char[]                有时是这个
    stringbuilder         偶尔是这个   
      

  4.   

    CharSet = CharSet.Ansi 用stringbuilder不行?
    直接用byte[]看
    比如传AB这2个字符
    byte[] operno = new byte[3];
    operno[0] = 65; //A
    operno[1] = 66; //B
    operno[2] = 0;
      

  5.   

    现在的系统大多是Unicode的了吧,至少XP以上都是了,应该指定CharSet.Unicode啊
      

  6.   

    问题已解决,用char[]即可,用着去别忘了初始化一下char[] operno = new char[12];
      

  7.   


    用char[]即可,用之前别忘了初始化一下char[] operno = new char[12];