[.net][CPP][C#]
C++側
typedef struct _StrData{ INT32 num0; INT32 num1; INT32 num2; INT32 num3; INT32 num3; char moji0[5]; // 4文字 char moji1[2]; // 1文字 StrData(){ num0 = num1 = num2 = num3 = num4 = 0; memset(moji0,0,5); memset(moji1,0,2); }; }StrData; ... Invoke()でC# APIコール
C#
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct StrData { public Int32 num0; public Int32 num1; public Int32 num2; public Int32 num3; public Int32 num4; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public String moji0; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] public String moji1; }; .... public bool TestArray(string[] aData0, string[] aData1, int[] p_aOutput) { int ret_i = 0; System.IntPtr ptr = new System.IntPtr(p_aOutput[ret_i]); StrData ret_StrData = (StrData)Marshal.PtrToStructure(ptr, typeof(StrData)); ret_StrData.num0 = 100; ret_StrData.num1 = 110; ret_StrData.num2 = 90; ret_StrData.num3 = 100; ret_StrData.num4 = 100000; ret_StrData.moji0 = "1001"; ret_StrData.moji1 = "a"; Marshal.StructureToPtr(ret_StrData, ptr, true); ret_i++; return true; }
ネタ元