2009-05-19 89 views

回答

9

不正確。

我理解你的問題是詢問COM calling or using a .NET class

根據this page,您可以將託管類的方法,屬性和字段公開給COM使用者。

要暴露給COM的所有託管類型,方法,屬性,字段和事件都必須是公共的。類型必須有一個公共的默認構造函數,它是唯一可以通過COM調用的構造函數。

這是否對你的工作?:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
[Guid("A1209192-723B-4325-8599-FB39D9F202D9")] 
public interface ITicklee 
{ 
    [DispId(1)] 
    void TickleMe(); 

    [DispId(2)] 
    int Count{get;} 
} 


[Guid("45715A3B-CA95-49f7-9889-A0022B31EF8A")] 
public class Elmo : ITicklee 
{ 
    // default ctor 
    public Elmo() {} 

    private int _tickleCount; 

    public int Count 
    { 
     get 
     { 
      return _tickleCount; 
     } 
    } 

    public void TickleMe() 
    { 
     _tickleCount++; 
    } 
} 

一個VBScript測試客戶端可能是這樣的:

Sub TestTickle() 

    WScript.echo("") 

    WScript.echo("Instantiating an Elmo ...") 
    dim elmo 
    set elmo = WScript.CreateObject("Ionic.Tests.Com.Elmo") 

    WScript.echo("Tickling...") 

    For i = 1 to 5 
     elmo.TickleMe() 
    Next 

    WScript.echo("") 
    c = elmo.Count 

    WScript.echo("Tickle Count = " & c) 

    ' one for the road' 
    elmo.TickleMe() 

End Sub 

call TestTickle()  ' ahem ' 
1

如果你的意思是你不能公開的COM對象屬性爲.NET應用程序使用interop,並且COM對象是在VB中創建的,那麼你是正確的。 VB使用屬性LET作爲本機類型,使用屬性SET作爲對象類型。如果您嘗試從.NET應用程序設置COM對象的屬性,它會嘗試使用SET。如果底層屬性是本機VB類型,則失敗。

據我所知,除了使用方法而不是屬性之外,唯一的解決方案是手動操作IDL。

-3

點評:據我所知,你可以使用只讀屬性只有

+0

雖然這很煩人,當你不能因低信譽發表評論,請避免回答的問題與意見。 http://stackoverflow.com/help/whats-reputation可以提供一些關於聲譽獲得(和損失)的信息 – chrisb2244 2014-09-27 15:24:49