3

COM可視アセンブリを生成できますか(CodeDomなどを使用)?

C#クラスをVBAに公開しようとしています。基本的に、私はオブジェクト駆動型のWebサーバーを持っており、Webサーバーを構築するたびに、他のコンテキスト(Excel / VBA)からのデータにアクセスするために、いくつかのラッピングクラス(CodeDomを使用して表示されるCOM)も生成したいと思います。 、など...)。

それで、これはまったく可能ですか?

更新:SnoopyのRegFreeアプローチを 試して、 CodeDomを使用してそのクラスをtest2.dllにビルドします。

   namespace Test
   { 
       public class TestClass
       {
        private double _d1;
        private double _d2;

              public double d1 {
                get { 
                  return _d1; }
                set { _d1 = value; }
              }

           public double d2 {
            get { return _d2; }
            set { _d2 = value; }
           }

           public double sum()
           {
            return d1 + d2;
           }
       }
   }

VBEで次のようになります。 ここに画像の説明を入力してください

4

2 に答える 2

1

ComVisibleAttributeのドキュメントを見ると、

デフォルトはtrueです。これは、管理対象タイプがCOMに表示されることを示します。この属性は、パブリックマネージドアセンブリとタイプを表示するために必要ではありません。これらはデフォルトでCOMに表示されます。

次に、デフォルトのコンストラクターを持つパブリック型のみなど、いくつかの制限があります。

于 2012-11-16T11:02:41.063 に答える
0

はい、これは Register Free COM を使用して可能です。

1) Excel を開き、次の参照を追加します。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoree.tlb (共通言語ランタイム実行エンジン 2.4 ライブラリ)

C:\Windows\Microsoft.NET\Framework\v4.0.30319\ mscorlib.tlb

Code Dom で生成された Classlibrary を、Excel シートが保存されているディレクトリと同じディレクトリに追加します。

3) 次の VBA コードを使用します。

サブ Command1_Click()
     Dim clr As CorRuntimeHost
     Dim ドメインを AppDomain として
     Dim objTest をオブジェクトとして
     文字列として薄暗いfltResult

     clr = 新しい CorRuntimeHost を設定します

     clr.Start
     clr.GetDefaultDomain ドメイン
     objTest = domain.CreateInstanceFrom("C:\Bla\YourGeneratedClassLibrary.dll", "NetComClassLibrary.Info").Unwrap を設定します。
     fltResult = objTest.Version
     clr.ストップ

     '//Debug.Print fltResult
     MsgBox fltResult
 サブ終了

詳細情報: http://blogs.msdn.com/b/junfeng/archive/2006/04/20/579748.aspx

于 2012-11-16T11:05:06.590 に答える