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“呢,就是只是字符串的第一个字符。是哪个地方弄错了么?急啊,求教大神。。。。。。