[StructLayout(LayoutKind.Sequential)]
public struct Data
{
public double d1;
public double d2;
public int year;
public int month;
public int day;
}
[DllImport("CppDll")]
public static extern bool MyCppFunc(int count, Data[] data);
static void Main(string[] args)
{
List<Data> list = new List<Data>
{
new Data
{
d1 = 123,
d2 = 0.5,
year = 2018,
month = 3,
day = 12
},
new Data
{
d1 = 456,
d2 = 0.75,
year = 2018,
month = 3,
day = 15
},
};
MyCppFunc(list.Count, list.ToArray());
}
C++:
typedef struct _MYDATA
{
double d1;
double d2;
int year;
int month;
int day;
} MYDATA;
BOOL WINAPI MyCppFunc(int count, MYDATA * data)
{
for (int i = 0; i < count; i++)
{
printf("d1=%f\n", data[i].d1);
printf("d2=%f\n", data[i].d2);
printf("year=%d\n", data[i].year);
printf("month=%d\n", data[i].month);
printf("day=%d\n\n", data[i].day);
}
return TRUE;
}
正如评论中已经建议的那样,使用该结构会更方便。
DateTime
最好不要直接将其传递给 C++,而是将其转换为其他东西。这是一个例子。C#:
C++: