Я пишу парсер файлов "ICS / VCS" в win32 c ++.
После десериализации из файла я храню данные о событиях в списке структуры событий.
Теперь я хочу получить доступ к этому структурированному списку в c #.Для этого я экспортировал функцию и список в DLL.
Я не знаю, как получить доступ к этому списку в c #.
Вот моя структура событий:
struct Event {
Event(): Alarms(new list<Alarm>), RecurrenceNo(0), BaseEvent(this) {}
Event(const Event &Base) :
UID(Base.UID),
Organizer(Base.Organizer),
Summary(Base.Summary),
Description(Base.Description),
Attendee(),
Categories(Base.Categories),
DtStamp(Base.DtStamp),
DtStart(Base.DtStart),
DtEnd(Base.DtEnd),
RRule(Base.RRule),
Alarms(Base.Alarms),
AttendeeCounter(Base.AttendeeCounter),
RecurrenceNo(Base.RecurrenceNo)
{
BaseEvent = Base.BaseEvent == (Event *)&Base ? (Event *)&Base : Base.BaseEvent;
}
~Event() {
if (BaseEvent == this)
delete Alarms;
}
operator string() const;
bool HasAlarm(const Date &From, const Date &To);
string UID, Summary, Description, Categories, Attendee[100], Organizer;
int AttendeeCounter=0;
Date DtStamp, DtStart, DtEnd;
Recurrence RRule;
list<Alarm> *Alarms;
unsigned short RecurrenceNo;
Event *BaseEvent;
};
Вот ExportFunction.h
extern list <Event *> ListofAllEvents;
extern "C" __declspec(dllexport) list <Event *> ParseCalendar(std::string FilePath);
Вот функция, которую я экспортирую " ExportFunction.cpp "
list <Event *> ParseCalendar(std::string FilePath)
{
const char * InputPath = FilePath.c_str();
ICalendar Calendar(InputPath);
return ListofAllEvents;
}
Вот Program.cs
[DllImport("D:\\Projects\\iCalander\\x64\\Debug\\iCalander.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ParseCalendar(string FilePath);
Показывает ошибку нарушения доступа.что ожидается, потому что я не получаю доступ правильно.
Я новичок в pInvoke и маршалинге.