C # загрузка C ++ DLL - проблема при выходе - PullRequest
2 голосов
/ 05 мая 2011

Хорошо, поэтому у меня есть пользовательский интерфейс C #, который использует C ++ DLL.DLL на самом деле игра OpenGL / SDL.Как только игра закончится, она возвращается к C # UI.Все это работает хорошо и, насколько я знаю, правильно.

Проблема возникает, когда я пытаюсь выйти из реальной программы.Форма C # закрывается, однако вскоре следует ошибка, которая довольно неописуема.Я предполагаю, что это как-то связано с DLL, возможно, она все еще открыта?Как убедиться, что библиотека DLL закрылась правильно?Или как закрыть все это вместе?

Я открываю DLL следующим образом:

    [DllImport("AsteroidGame.dll")]
    public static extern int EntryPoint();

    private void rungame()
    {
            EntryPoint();
    }

Заранее спасибо.

РЕДАКТИРОВАТЬ

Ошибка просто говорит:

vshost32.exe перестал работать

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

DLL выгружается Windows при выходе из приложения.Во время этого процесса статические переменные вашей DLL будут уничтожены.Если ваша игра не завершилась должным образом и какой-то цикл все еще отправляет события, например, статическому классу, который, в свою очередь, направляет их в ваш C # UI, вы можете получить такую ​​ошибку.

Сначала вы должны проверить, вызывали ли вы все процедуры очистки вашего игрового движка, прежде чем выходить из C # UI.Если это не помогает, вам необходимо выполнить дальнейшую отладку в неуправляемый код.

Yorus, Alois Kraus

1 голос
/ 05 мая 2011

Вы не можете выгрузить внешнюю сборку из c #, вы можете только выгрузить домен приложения, который ее загрузил. Вы можете создать домен приложения (http://msdn.microsoft.com/en-us/library/system.appdomain.aspx), а затем загрузить сборку c ++ отсюда. По завершении игры выгрузите домен приложения.

...