Проблема вызова функции C ++ / CLR из C# - WPF -> Попытка чтения или записи в защищенную память - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю плагин для существующего программного обеспечения с использованием C ++ / CLI (для основного ядра) и C# WPF (для пользовательского интерфейса). Я пытаюсь следующий поток:

Init C# -WPF из C ++ / CLI (MainCore) и открыть интерфейс пользователя (WPF):

void BCFConsumer::ShowUI() {
    CSMainWindow^ UI = gcnew CSMainWindow();
    UI->Show();
}

В интерфейсе пользователя I ' вызов функции C ++ / CLI для события Button_Click:

public void Select_Click(object sender, RoutedEventArgs e)
        {
            SelectElements();
        }

Функция C ++ / CLI - SelectElements () - импортируется в интерфейс пользователя (C#) с помощью:

[DllImport("BCF.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?StartObjectSelect@BCFConsumer@@SAXXZ")]
        public static extern void SelectElements();

Функция SelectElements () выглядит и экспортируется из C ++ / CLI:

__declspec(dllexport) void __cdecl  BCFConsumer::StartObjectSelect()
{
    // switch to selection mode
    m_InputMode = MODE_SELECT;
    // set IFW to selection mode
    ::SendInteractorMessage(FM_INPUTFUNCTION_SET, new CObjectSelectGeneral(_T("Select symbols(s)"), SEL_ALL, true, false));
}

Пользовательский интерфейс загружается хорошо, ButtonClick заканчивается в C ++ / CLI функцией StartObjectSelect (), поэтому пока все хорошо.

Моя проблема - это исключение, если я вызываю функцию StartObjectSele c () (C ++ / CLI) из интерфейса пользователя (C#). Если я вызываю функцию StartObjectSele c () (C ++ / CLI) из кода C ++ / CLI (например, из конструктора), она работает нормально. Исключение, которое бросается, говорит:

"Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена."

Я думаю, что это имеет что-то делать с потоками, Dispatcher, beginInvoke et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...