我可以“生成”COM可见组件吗?

时间:2012-11-16 10:13:21

标签: c# com

我可以生成COM可见程序集(使用CodeDom或其他任何东西)吗?

我希望将C#类暴露给VBA。基本上,我有一个对象驱动的Web服务器,每次我构建我的Web服务器,我想生成一些包装类(使用CodeDom可见COM),因为一些客户端将需要这些来访问来自其他上下文的数据(Excel / VBA)等等......)。

这有可能吗?

更新 尝试使用 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中得到以下内容: enter image description here

2 个答案:

答案 0 :(得分:1)

如果您查看ComVisibleAttribute的文档,则说

  

默认值为true,表示托管类型对COM可见。不需要此属性来使公共托管程序集和类型可见;它们在默认情况下对COM可见。

然后有一些限制,比如只有默认构造函数的公共类型等。

答案 1 :(得分: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 Sheet的同一目录

3)使用以下VBA代码:

Sub Command1_Click()
     Dim clr As CorRuntimeHost
     Dim domain As AppDomain
     Dim objTest As Object
     Dim fltResult As String

     Set clr = New CorRuntimeHost

     clr.Start
     clr.GetDefaultDomain domain
     Set objTest = domain.CreateInstanceFrom("C:\Bla\YourGeneratedClassLibrary.dll", "NetComClassLibrary.Info").Unwrap
     fltResult = objTest.Version
     clr.Stop

     '//Debug.Print fltResult
     MsgBox fltResult
 End Sub

更多信息: http://blogs.msdn.com/b/junfeng/archive/2006/04/20/579748.aspx