2012-10-10 14 views
1

我使用將從VBA使用的C#創建類庫。但有一件事情讓我討論 - 當我刪除或更改方法名稱中的某些字母並嘗試編譯vba項目時,我不會收到任何錯誤。但是,我想要得到編譯錯誤信息,因爲我發現它是因爲使用後期綁定而發生的。只在C#中啓用COM類的早期綁定

我會盡力解釋。

  1. 這是正確的簽名:

    Sub Test() 
        Dim cls as New SomeClass 
        cls.SomeMethod 
    End Sub 
    
  2. 這是簽名與拼寫錯誤:

    Sub Test() 
        Dim cls as New SomeClass 
        cls.**SomeMetod** 
    End Sub 
    
  3. 出版社編譯VBA項目 - 一切正常,但它不應該是。

我已經改變了基本接口,如下圖所示:

[Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IComInterface 
{} 

和基類:

[ClassInterface(ClassInterfaceType.None)] 
public class BaseClass 

但沒有任何反應!我只在運行時遇到錯誤。

+0

然後不要使用遲綁定。在你使用的任何vba工具中添加類型庫。 –

+0

「然後不要使用遲到綁定」 - 我不知道如何使用早期綁定來製作我的課程 – frippy

+0

直到你解釋了你正在使用的啓用vba的程序時,你才能得到一步一步的答案。如果這實際上是VBScript,那麼早期綁定是不可能的。 –

回答

1

解決辦法是:

[Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    public interface IComInterface 
    {} 

和基類:

[ClassInterface(ClassInterfaceType.AutoDual)] 
    public class BaseClass 

你的代碼的版本將不支持知道!另外.NET方法如ToString(),GetHashCode()等在VBA中可見。所以你需要爲這些方法使用屬性[ComVisible(false)]。這將適用於ToString,GetHashCode,Equals。在這種情況下,GetType無法隱藏。因此,您需要決定是否需要隱藏.NET方法或有早期綁定和補償警告

相關問題