日期:2014-05-17  浏览次数:20757 次

C#中调用C++dll的问题!!急。。。。。。。
这里是C++中声明的头文件
struct AIS{
int type;
long mmsi;
float turn;
char status[10];
};
extern int _stdcall ReturnAIS(const char *buf,struct AIS* ais);

这是函数的定义:
int _stdcall ReturnAIS(const char *buf,AIS *ais)
{
ais->type=11;
ais->mmsi=987654321;
ais->turn=11.1111;
strcpy(ais->status,buf);
return 0;
}


这里是C#导入的代码
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct AIS
        {
            public int type;
            public int mmsi;
            public float turn;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string status;
            //public byte[] status;
            
        }

        [DllImport("dlldemo.dll", EntryPoint = "ReturnAIS", CharSet = CharSet.Auto)]
        public static extern int ReturnAIS(string buf, ref AIS ais);
        //public static extern int ReturnAIS(char[] buf, ref AIS ais);

这是C#函数里调用函数的代码
 Console.WriteLine("---------------TEST ReturnAIS------------");
            string status = "222222222";
            CFuns.AIS aisout = new CFuns.AIS();
            int r = CFuns.ReturnAIS(status,ref aisout);
            Console.WriteLine("{0}\n{1}\n{2}\n{3}\n",aisout.type,aisout.mmsi,aisout.turn,aisout.status);
            Console.ReadKey();


小弟的问题是 为什么在输出的时候aisout这个结构体里面的成员status并不是“222222222”却只是一个”2“呢,就是只是字符串的第一个字符。是哪个地方弄错了么?急啊,求教大神。。。。。。
c#? dll c++ c# string

------解决方案--------------------
顶!!一下,同求!
------解决方案--------------------
char.auto => char.ansi.
------解决方案--------------------
其实楼主你可以用 c++cli 直接调