Я пытаюсь научиться использовать управляемое / неуправляемое взаимодействие кода, но я столкнулся со стеной, которую 4 часа поиска в Google не смогли преодолеть. Я собрал 2 проекта в Visual Studio, один из которых создал Win32 EXE, а другой - приложение Windows Forms .NET. После нескольких раздумий я получил код на C # для правильного вызова кода на c ++, но с этого момента я начал получать AccessViolationException каждый раз, когда попадал туда. Вот код из .cpp файла:
extern "C" __declspec(dllexport) void QuickTest()
{
int iTest = 0;
int aTestArray[3] = {1,2,3};
return;
}
А вот код приложения Windows C #, вызывающий его:
[DllImport("UnmanagedEvaluation2.exe")]
static extern void QuickTest();
Довольно просто, верно? Вызов работает, и я могу войти в код на c ++ (я включил неуправляемую отладку для проекта), но он умирает в строке создания массива каждый раз с AccessViolationException. Тот же код работает нормально, когда я запускаю исполняемый файл (код c ++ находится в проекте консольного приложения, я попытался вызвать его из функции _tmain и никаких проблем), но при обращении к нему из .NET он взрывается каждый раз.
Должно быть что-то очевидное, чего мне здесь не хватает, но я не нашел ничего полезного в чтении учебных пособий, и большинство постов по этому исключению - это люди, имеющие проблемы со сложными маршалингами или GCHandles. Заранее спасибо за любую помощь.
Обновление:
Вы были прямо внизу, но это странно. Сначала, когда я начал это, я предполагал, что я не смогу это сделать (вызывать функции в исполняемых файлах), но когда я попробовал это - это действительно сработало, это вызов. Кажется, что это позволяет вам вызывать функцию в исполняемый файл, но как только вы пытаетесь выделить какую-либо память, она умирает. В любом случае, спасибо за совет, похоже, теперь он работает правильно.