本人c#一窍不通,只会c,c++和java。
现在有个任务,希望用c#调用一些我们用c写的接口。
dll函数如下:
int GetVersion(unsigned char  *pbyMajor,        
                                 unsigned char  *pbyMinor,        
                                 unsigned long  *piRevision);
c#中调用:
   public class Test
    {
        [DllImport("test.dll", EntryPoint = "GetVersion",
            CharSet = CharSet.Ansi, 
            CallingConvention = CallingConvention.StdCall)]
        public static extern int GetVersion(ref string pbyMajor,
                                 ref string pbyMinor,
                                 ref string piRevision);
    }
main中调用:
            string t1 = "";
            string t2 = "";
            string t3 = "";
             int r = Test.GetVersion(ref t1, ref t2, ref t3);
但是获取到的t1,t2,t3内容是不正确的,所以不知道是什么问题,这三个参数都属出参。
谢谢各位。

解决方案 »

  1.   

    unsigned char *,和char* 不一样,你确认是返回string类型吗
      

  2.   

    是的,返回的就是字符串。dll应该是memcpy到传入的buffer里的。
      

  3.   

    LZ,函数映射有问题:public static extern int GetVersion(ref byte pbyMajor,  ref byte pbyMinor,  ref int   piRevision);你再试试!
      

  4.   

        可以试试把string替换为StringBuilder。
         如果还不行的话,把String替换为IntPtr,然后用Marshal.PtrToStringAnsi函数转成String