问题描述
delphi代码:1、定义的结构体TestRecord=recordA:array[0..5]ofchar;B:array[0..6]ofchar;C:array[0..7]ofchar;end;2、delphi调用函数functiontest(trecord:TestRecord):integer;stdcall;c#代码:1、c#针对delphi定义的结构体[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]publicstructTestRecord{[MarshalAs(UnmanagedType.ByValTStr,SizeConst=6)]publicstringA;[MarshalAs(UnmanagedType.ByValTStr,SizeConst=7)]publicstringB;[MarshalAs(UnmanagedType.ByValTStr,SizeConst=8)]publicstringC;}2、声明调用的接口[DllImport("Jx104.dll")]publicstaticexterninttest(TestRecordt);3、c#调用初始化代码TestRecordt=newTestRecord();t.A="abcdef";//+((char)0).ToString();t.B="1234567";//+((char)0).ToString();t.C="98765432";//+((char)0).ToString();JX104NET_API.test(t);现在问题直接调用后在delphi是监控中显示结果是:(('a','b','c','d','e',#0),('1','2','3','4','5','6',#0),('9','8','7','6','5','4','3',#0))发现每个结构中少最后一个字符,这是什么原因造成的,该如何解决,谢谢。
解决方案
解决方案二:
把string换成byte[]
解决方案三:
用byte[]也不行