2016-10-28 3 views
2

Winformを含むC#dllをビルドしました。 Excel VBAからフォームを開きたい最初の試みは常に成功です。それは私がそれをしたいすべてのものを開き、行います。 「最初IWin32Windowオブジェクトがアプリケーションで作成される前に、SetCompatibleTextRenderingDefault呼び出さなければなりません。」:そして、私は常にエラーメッセージが表示されます二回目は、それを開こうとすると、それは右上の赤いXExcel VBAとC#DLL:WinFormsインスタンス化オブジェクトは1回だけ実行できます。 2回目の試行でエラーが発生する

を使用して閉じますソース:System.Windows.Forms

WinFormsクラスは、Visual Studioによって標準生成されるクラスです。呼び出しは非常に単純ですエクセルVBAで

namespace Schnittstellenvererbung 
{ 
    [ComVisible(true), Guid("5D16EABF-B89F-45A1-8E4D-ACFAA084BF6F")] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    public interface ISchnittstellenvererbung 
    { 
     string ShowForm1(); 
    } 

    [ComVisible(true), Guid("6A9EF0BB-BFF3-456E-B025-CB6A25F81F59")] 
    [ProgId("Test.SchnittstellenvererbungExecuteProgram")] 
    [ClassInterface(ClassInterfaceType.None)] 
    public class ExecuteProgram : ISchnittstellenvererbung 
    { 
     public string ShowForm1() 
     { 
      try 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Form1 Oberflaeche; 
       Oberflaeche = new Form1(); 
       Oberflaeche.ShowDialog(); 
      } 
      catch(Exception e) 
      { 
       MessageBox.Show(e.Message + e.Source); 
      } 

      return "Done"; 
     } 
    } 
} 

:私は別のクラスでそれをインスタンス化

Sub test() 

    Dim y As String 
    Dim x As New Schnittstellenvererbung.ExecuteProgram 

    y = x.ShowForm1 

End Sub 

私はExcelを閉じてから再度開くと、それは最初の試行で再び動作しますが、再度、二度目の試みは失敗する。

なぜこのエラーが表示されるのだろうか。なぜなら、SetCompatibleTextRenderingDefaultメソッドは、フォームのintantiatingの前に常に呼び出されるからです。

アイデア?

+0

多分これはhttps://social.msdn.microsoft.com/Forums/windows/en-US/26960a4cを助けることができます-040a-40b4-baea-15adc275b44c/setcompatibletextrenderingdefault-before-the-first-iwin32window-object-made-in?forum = winforms – GuidoG

+0

また、Overflaecheを処分することを忘れないでください。あなたがしなければGCは面白いことをし、問題の一部になると私は驚かないだろう – GuidoG

+0

問題の一部であるかもしれないが、処分しても問題は解決しないかもしれない。私は関数にcloseとdisposeコマンドを追加しました。ちょうどテストのために: –

答えて

0

msdnで解決策が見つかりました。 Windowsフォームは別のスレッドで実行されます。サンプルコードはVBですが、C#に変換するのは難しくありません。もし誰かが助けを必要とするなら、それはteleriksコードコンバータで変換することができます。

リンク:

MSDNソリューション:https://msdn.microsoft.com/en-us/library/ms229591%28v=vs.110%29.aspx

コードコンバータ:http://converter.telerik.com/

関連する問題