Я использую DLL, написанный на C++ в моем проекте C#, используя DllImport и одну из функций, которые я использую, выглядит так:C++ Struct в C#
[DllImport("dds.dll", CharSet = CharSet.Auto)]
private static extern int Par(
ddTableResults2 tableResult,
ref parResults ParResult,
int vul
);
parResults структура определена в C++ как это:
struct parResults {
/* index = 0 is NS view and index = 1
is EW view. By 'view' is here meant
which side that starts the bidding. */
char parScore[2][16];
char parContractsString[2][128];
};
начало C++ функция
int STDCALL Par(struct ddTableResults * tablep, struct parResults *presp,
int vulnerable)
Как следует определить выше структуры в C#, чтобы иметь возможность отправлять эта структура как ссылка в функцию DLL?
Это то, что я пытался, но не работают на всех, и я просто получаю нарушение прав доступа Ошибка
[StructLayout(LayoutKind.Sequential)]
public struct parResults
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[,] parScore;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[,] parContractsString;
public parResults(int x)
{
parScore = new char[2,16];
parContractsString = new char[2,128];
}
}
Я думаю, что для начала вам следует опубликовать истинное определение структуры C++ и функцию, которую вы импортируете. Поддельная версия созданной вами структуры оставляет нам интересно, что еще изменилось из кода, который компилируется, и кода, который вы разместили. –
Я посмотрю, смогу ли я его найти! – StefanE
Как насчет 'struct ddTableResults'? Как это объявлено в C++ и C#. Почему это не передано ref в C#? –