我可以生成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中得到以下内容:
答案 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