解决方案 »

  1.   

    本帖最后由 bdmh 于 2014-07-23 16:37:59 编辑
      

  2.   

    如果改了stringbuilder还有问题,
    DllImport相关的属性最好都显式说明下,例如:[DllImport("mydll", EntryPoint = "MyFunction", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
      

  3.   

    http://blog.csdn.net/jiangxinyu/article/details/8059543  参考,
      

  4.   


    C# 里面的 string 是 unicode 的,你这里写明了要 CharSet = CharSet.Ansi, 调用肯定失败。
    最好的 办法是把 Charset 改成 unicode 的;如果实在不行可以用 Marshal.StringToHGlobalAnsi 把 unicode string 转 ansi
      

  5.   

    1. CharSet要根据dll内部的约定来定,并不是全是Unicode
    2. 只是给个例子说明下dllimport的相关参数,没有说是标准答案
      

  6.   


    试过了都不行;

    [DllImport("SendWineEV.dll", CharSet=CharSet.Unicode)]
    [return: MarshalAs(UnmanagedType.Bool )]
    public static extern bool EvideoOpenRoom( [MarshalAs(UnmanagedType.BStr)] string RoomIP,  [MarshalAs(UnmanagedType.BStr)] string ServerIP, int DataLen);后来这样 [MarshalAs(UnmanagedType.BStr)]  string 试了一下 可以了,可能主要是传入的字符类型不符。