簡體   English   中英

為什么將程序集中的某些類暴露給COM,而其他卻不暴露給COM?

[英]Why would some classes in an assembly be exposed to to COM but not others?

我正在努力制作供VBA使用的類庫。 我在項目中上了一堂課,但是第二堂課似乎沒有注冊。 如果我使用VBS進行測試,則CreateObject(“ Libname.Class2”)可以工作,但是CreateObject(“ Libname.Class1”)給出了“ ActiveX組件無法創建對象”錯誤。 RegAsm沒有提供任何有用的反饋-只是說某些類型已導出,但沒有告訴我為什么其他類型沒有。 我也只能在OleView中找到Class2。

與此類錯誤相關的問題的大多數答案都涉及使用了錯誤版本的RegAsm(x86 / x64)的情況,但是鑒於已經成功注冊了一個類,所以我無法想象是這種情況(無論如何,我都在同時注冊這兩個版本。 還有一些建議建議確保默認構造函數中包含某些內容,以便不會對其進行優化,但這似乎也無濟於事。

兩者具有完全相同的屬性(除了ProgId之外),並且具有相對相似的接口:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface _Class1
{
    _Class2 GetClass2();

    string testertong { get; }
}

[ClassInterface(ClassInterfaceType.None)]
[ProgId("Libname.Class1")]
[ComVisible(true)]
class Class1 : _Class1
{
    private ...;

    public Class1 ()
    {
        /* Constructor stuff - commenting it out doesn't help */
    }

    public _Class2 GetClass2()
    {
        /* Generate and return an instance of Class2.  Tried return null too */
    }

    public string testertong
    {
        get
        {
            return "I love yams";
        }
    }
}

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface _Class2
{
    ArrayList GetLog(int entries);

    string testytest { get; }
}

[ClassInterface(ClassInterfaceType.None)]
[ProgId("Libname.Class2")]
[ComVisible(true)]
public class Class2 : _Class2
{
    internal IThing client;

    public Class2()
    {
        /* Currently empty but works fine */
    }

    public ArrayList GetSubmissionLog(int entries)
    {
        return new ArrayList(client.GetSubmissionLog(entries));
    }

    public string testytest
    {
        get { return "wololo"; }
    }
}

實際上,Class2是我創建和編譯的兩個中的第一個。 Class1實際上將成為執行一些WCF設置的Factory對象。 我不知道將類添加到先前注冊的程序集是否會引起問題(如果這樣,我將如何解決)?

以下VBS可以正常工作:

Set y = CreateObject("Libname.Class2")
Msgbox y.testytest

非常感謝任何幫助

由於未指定可見性級別,所以Class1是隱式internal

更改為

[ClassInterface(ClassInterfaceType.None)]
[ProgId("Libname.Class1")]
[ComVisible(true)]
public class Class1 : _Class1
{

這記錄在ComVisibleAttribute下:

只有公共類型可以顯示。 該屬性不能用於使其他內部或受保護的類型對COM可見,或使不可見類型的成員可見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM