我Mono.WinForms
用来在 Unity 中创建外部窗口,它工作得很好,除了我每次播放场景时都会收到此错误消息(但从来没有第一次在 Unity 新启动时):
无法注册窗口类,win32 错误 0。
我认为这是因为当我停止场景时表单类没有取消注册。当我重新启动 Unity 时,它们确实会取消注册,并且在我构建时我没有遇到问题,这是有道理的。
我两次收到此弹出错误,这是由以下原因引起的:
myForm = new Form1();
myForm.Show();
我浏览了XplatUIWin32.cs
文件的代码并找到了RegisterWindowClass
方法。当 Mono 注册一个类时,它会这样做:
class_name = string
.Format("Mono.WinForms.{0}.{1}",
System.Threading.Thread.GetDomainID ().ToString (), classStyle);
所以我设法通过这样做摆脱了第二个错误:
UnregisterClass("Mono.WinForms.1.0", IntPtr.Zero);
所以我的问题是为什么它只适用于第二个弹出错误,我如何摆脱第一个?我试图强制垃圾收集,但没有帮助。我试图找到另一个注册的班级名称,但这里也没有运气。
对于信息,我使用 System.Windows.Forms.dll 的单声道版本作为参考,在 Visual Studio 中编译我的代码并将生成的 DLL 导入 Unity。除了那些弹出错误之外,它的效果很好。