Я импортирую некоторые c ++ dll в проект c #, я использую Visual Studio 2010. Мне удалось импортировать функцию, использующую встроенный тип, однако я получаю сообщение об ошибке, когда пытаюсь разобраться со структурой. Это простой пример:
код C ++
typedef long int TDate;
typedef struct _TMDYDate
{
long month; /* In range [1,12] */
long day; /* In range [1-31] */
long year; /* In range [1600-] */
} TMonthDayYear;
int JpmcdsDateToMDY
(TDate date, /* (I) TDate format */
TMonthDayYear *mdyDate);
и я перевел на c # как:
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct TMonthDayYear {
public int month;
public int day;
public int year;
}
public partial class NativeMethods {
[System.Runtime.InteropServices.DllImportAttribute("MyDll.dll", EntryPoint="JpmcdsDateToMDY")]
public static extern int JpmcdsDateToMDY(int date, ref TMonthDayYear mdyDate) ;
}
когда я пытаюсь запустить функцию в моей тестовой программе, я получаю эту ошибку:
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. at CsharpWrapper.NativeMethods.JpmcdsDateToMDY (Int32 date, TMonthDayYear & mdy Date)
Структура объявлена в стеке, и я подумал (возможно), что это проблема, но я все еще получаю ту же ошибку, даже если я изменил TMonthDayYear на класс.
Что я делаю не так?
Спасибо за помощь.