[.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;
}
ネタ元