在 Dynamo 套件中使用 COM (互通性) 類型

一些有關互通性類型的一般資訊

什麼是 COM 類型?- https://learn.microsoft.com/zh-tw/windows/win32/com/the-component-object-model

在 C# 中使用 COM 類型的標準方法,是使用套件來參考和遞送主要的互通性組合 (基本上是 API 的一個大型集合)。

另一種方法是將 PIA (主要互通性組合) 嵌入受管的組合中。這基本上只是納入受管組合實際使用的類型和成員。但是,此方法還存在一些其他問題,例如類型對等項。

這篇文章仔細描述了這個問題:

Dynamo 如何管理類型對等項

Dynamo 將類型對等項委派給 .NET (dotnet) 執行階段。例如,來自不同組合且具有相同名稱和名稱空間的 2 個類型將不會視為對等項,Dynamo 在載入衝突的組合時將產生錯誤。至於互通性類型,Dynamo 將使用 IsEquivalentTo API 檢查互通性類型是否為對等項

如何避免嵌入式互通性類型之間發生衝突

一些套件已使用嵌入式互通性類型建立 (例如 CivilConnection)。載入 2 個包含不是對等項的嵌入式互通性組合的套件 (這裡定義不同版本) 將導致 package load error。因此,我們建議套件作者對互通性類型使用動態繫結 (也稱為後期繫結) (這裡也介紹了解決方法)。

您可使用此範例:

public class Application
    {
        string m_sProdID = "SomeNamespace.Application";
        public dynamic m_oApp = null; // Use dynamic so you do not need the PIA types

        public Application()
        {
            this.GetApplication();
        }

        internal void GetApplication()
        {
            try

            {
                m_oApp = System.Runtime.InteropServices.Marshal.GetActiveObject(m_sProdID);
            }
            catch (Exception /*ex*/)
            {}
        }
    }
}

Last updated