3

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

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

那么这可能吗?

更新: 尝试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

是的,这可以使用免费注册 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()
     将 clr 调暗为 CorRuntimeHost
     暗域作为 AppDomain
     将 objTest 调暗为对象
     将 fltResult 调暗为字符串

     设置 clr = 新 CorRuntimeHost

     clr.开始
     clr.GetDefaultDomain 域
     设置 objTest = domain.CreateInstanceFrom("C:\Bla\YourGeneratedClassLibrary.dll", "NetComClassLibrary.Info").Unwrap
     fltResult = objTest.Version
     clr.停止

     '//调试.打印 fltResult
     消息框 fltResult
 结束子

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

于 2012-11-16T11:05:06.590 回答