好的,我有一个使用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已停止工作
答案 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。