Свойства .NET в COM Interop? - PullRequest
5 голосов
/ 19 мая 2009

Правда ли, что вы не можете использовать COM Interop для предоставления свойств COM? Все должно быть методом?

Если это не так, как ты это делаешь?

Ответы [ 3 ]

10 голосов
/ 19 мая 2009

Не верно.

Я понимаю, что ваш вопрос касается вызова COM или использования .NET класса .

Согласно этой странице , вы можете предоставлять методы, свойства и поля управляемых классов потребителям 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 голос
/ 22 мая 2009

Если вы имеете в виду, что вы не можете предоставлять свойства com-объекта приложению .NET с помощью взаимодействия, и COM-объект был создан в VB, то вы правы. VB использует свойство LET для собственных типов и свойство SET для типов объектов. Если вы пытаетесь установить свойство вашего COM-объекта из приложения .NET, оно пытается использовать SET. Если базовое свойство является собственным типом VB, это не выполняется.

Насколько мне известно, единственное решение, кроме использования методов, а не свойств, - это ручное управление IDL.

0 голосов
/ 27 сентября 2014

Комментарий: afaik Вы можете использовать только свойства только для чтения

...