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の前に常に呼び出されるからです。
アイデア?
多分これは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
また、Overflaecheを処分することを忘れないでください。あなたがしなければGCは面白いことをし、問題の一部になると私は驚かないだろう – GuidoG
問題の一部であるかもしれないが、処分しても問題は解決しないかもしれない。私は関数にcloseとdisposeコマンドを追加しました。ちょうどテストのために: –