2012-11-16 59 views
3

我可以生成COM可見程序集(使用CodeDom或其他)嗎?我可以「生成」COM可見程序集嗎?

我正在尋找暴露C#類到VBA。基本上,我有一個對象驅動的Web服務器,每次我構建我的Web服務器時,我想也會生成一些包裝類(使用CodeDom可見的COM),因爲某些客戶端需要這些來訪問其他上下文中的數據(Excel/VBA等等......)。

所以這是可能的嗎?

UPDATE: 試圖史努比RegFree方法,我建立一個班級分成test2.dll用的CodeDOM:

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

+1

它只是需要的屬性,所以沒有問題。 –

+0

我沒有得到您的評論 – Jerome

+0

我很困惑的COM註冊方面。我的理解是,這個屬性不會處理這個問題。 – Jerome

回答

0

是的,這是可能使用註冊COM一些限制。

1)打開Excel,並添加下列引用

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ mscoree.tlb(公共語言運行庫執行引擎2.4庫)

C: \的Windows \ Microsoft.NET \框架\ v4.0.30319 \ mscorlib.tlb

添加您的代碼的Dom產生Classlibrary到Excel表格存儲

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

+0

其實線程是巨大的,不知道我得到的點 – Jerome

+0

這完成我的答案:http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com – NickD

+0

好吧,看起來不錯。但我不會在objTest上獲得Intellisense,看起來像 – Jerome

1

如果你看看ComVisibleAttribute的文檔,它說

默認值爲true,表示託管類型對COM可見。該屬性不需要使公共管理的程序集和類型可見;默認情況下它們對COM可見。

再就是像只有公共類型的默認構造函數等

+1

好吧,然後我是一個有點困惑,因爲如果我需要通過手動構建一個類項目來將C#暴露給VBA,我需要勾選幾個框。我的理解是我需要從VBA引用.tlb。我目前似乎無法制作出這個 – Jerome

+0

不知道你的意思。您需要註冊這些類以使其對VBA可見。運行'regasm/codebase myclasses。dll'(並忽略關於未簽名程序集的警告) – adrianm

+0

我想我不完全理解com註冊,但我想對下面的問題的答案將爲我清除一些事情:該命令會影響dll以便它可以分發給我所有的客戶和使用?還是隻影響我的註冊表,所有客戶都需要註冊? – Jerome

相關問題