3

Unityで外部ウィンドウを作成するために使用Mono.WinFormsしていますが、シーンを再生するたびにこのエラーメッセージが表示されることを除いて、うまく機能します(ただし、Unityを新しく起動したときは初めてではありません):

ウィンドウ クラスを登録できませんでした。win32 エラー 0。

シーンを停止したときにフォームクラスが登録解除されていないためだと考えました。Unity を再起動すると登録が解除されますが、ビルドを作成しても問題はありません。これは理にかなっています。

このポップアップ エラーが 2 回発生します。原因は次のとおりです。

  1. myForm = new Form1();
  2. myForm.Show();

XplatUIWin32.csファイルのコードを調べて、RegisterWindowClassメソッドを見つけました。Mono がクラスを登録すると、次のようになります。

class_name = string
         .Format("Mono.WinForms.{0}.{1}", 
           System.Threading.Thread.GetDomainID ().ToString (), classStyle);

だから私はこれを行うことで2番目のエラーを取り除くことができました:

UnregisterClass("Mono.WinForms.1.0", IntPtr.Zero);

だから私の質問は、なぜそれが2番目のポップアップエラーでしか機能しないのか、そしてどうすれば最初のものを取り除くことができるのですか? ガベージコレクションを強制しようとしましたが、役に立ちませんでした。別の登録済みクラス名を見つけようとしましたが、ここでも運がありません。

参考までに、System.Windows.Forms.dll の mono バージョンを参照として使用し、コードを Visual Studio でコンパイルして、生成された DLL を Unity にインポートします。これらのポップアップエラーとは別に、うまく機能します。

4

1 に答える 1