簡體   English   中英

通過COM Interop公開C#類

[英]Expose C# class through COM Interop

我有一個C#類庫,也有一個powerbuilder應用程序。 我想公開c#類並在powerbuilder應用程序中使用它。 我使用以下博客介紹了這些功能,以便可以通過powerbuilder應用程序https://whoisburiedhere.wordpress.com/2011/07/12/creating-a-com-object-from-scratch-with-c/ http對其進行訪問://jumbloid.blogspot.com/2009/12/making-net-dll-com-visible.html

因此,我公開了COM並使其可以在Powerbuilder中訪問,但是我仍然有一些基本問題來確保是否遵循最佳指南。 該類在轉換為COM之前看起來像

 class classname
 {
    function1(){//do something}
    function2(){//do something}
    function3(){//do something}
    function4(){//do something}
 }  

為了轉換為COM,我創建了一個接口,我只想公開function1和function2。 所以我將類修改為

[ComVisible(true)]
[Guid("03S3233DS-EBS2-5574-825F-EERSDG8999"),InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface Iinterface
{
  function1();
  function2();
}

在主類中,我進行了以下修改:1.由於我不想公開所有公共方法,因此我在AssemblyInfo中將COM visible屬性設置為false。 2.類看起來像

[ComVisible(true)]
[Guid("2FD1574DS4-3FEA-455e-EW60A-EC1DFS54542D"), ClassInterface(ClassInterfaceType.None)]
class class1 : Iinterface
{
    function1(){//do something}
    function2(){//do something}
    [ComVisible(false)] //i don't want the mehtod to be exposed
    function3(){//do something}
    [ComVisible(false)]
    function4(){//do something}
}

我有以下問題需要我更好地理解:1.如果我將class的visible屬性設置為true以及默認的COM visible屬性(在assemblyinfo)為假? 我的理解是我只會在接口中具有要公開的功能,因此無論可見屬性如何,如果我在接口中沒有該功能,那么它將不可見? 我確實了解了如何通過復制dll並使用regasm.exe在客戶端計算機中使用regasm進行部署,我的問題是如何在未安裝.NET的非開發計算機中進行部署?

 [ClassInterface(ClassInterfaceType.None)]

這意味着沒有任何類實現細節是可見的,即正確的純COM方法。 因此, 沒有必要申請[標記有ComVisible特性(假)上的方法,你不希望暴露。 Iinterface方法可見。

例如,使用ClassInterfaceType.AutoDual在.NET中很方便,CLR會自動合成一個接口。 它與Visual Basic的舊版本(VBA,VB6)的行為匹配,但它們尚不支持接口。 但是,它確實暴露了太多信息,從System.Object繼承的方法(如GetHashCode等)也將可見,而沒有一種不錯的方法來隱藏它們。 您還將獲得對mscorlib.tlb類型庫的依賴。 因此,像您一樣明確聲明接口是肯定更好的方法。

目標計算機必須已安裝.NET,嚴格要求。

暫無
暫無

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

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