C#加载C ++ DLL - 退出问题

时间:2011-05-04 21:02:27

标签: c# c++ dll dllimport exit

好的,我有一个使用C ++ DLL的C#用户界面。 DLL实际上是一个OpenGL / SDL游戏。 一旦游戏结束,它就会回到C#UI。这一切都很好,据我所知,正确。

当我尝试退出实际程序时出现问题。 C#表单关闭,但很快就会出现错误,这非常不合情理。我假设它与DLL有关,也许它仍然是开放的?如何确保DLL已正确关闭?或者你们如何一起关闭它?

我按如下方式打开DLL:

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

    private void rungame()
    {
            EntryPoint();
    }

提前致谢。

修改

错误只是说:

vshost32.exe已停止工作

2 个答案:

答案 0 :(得分:5)

当应用程序退出时,Windows将卸载该DLL。在此过程中,您的dll的静态变量将被销毁。如果您的游戏没有正确结束并且某些循环仍在向例如一个静态类,它反过来将它们路由到您的C#UI,您可以得到这种错误。

首先,您应该在退出C#UI之前检查是否确实调用了游戏引擎的所有清理例程。如果这没有帮助,则需要进一步调试非托管代码。

Yorus,   Alois Kraus

答案 1 :(得分:1)

您无法从c#卸载外部程序集,只能卸载加载它的App Domain。您可以创建一个App Domain(http://msdn.microsoft.com/en-us/library/system.appdomain.aspx),然后从这里加载c ++程序集。完成游戏后,请卸载App Domain。