Свойства.NET в COM Interop?

Совет Стива Макконелла, из Код завершен : используйте многомерную таблицу. Каждая переменная служит индексом для таблицы, а оператор if превращается в поиск в таблице. Например, если (размер == 3 & amp; вес> 70) приводит к решению о записи в таблице [размер] [весовая группа]

5
задан Jason 19 May 2009 в 16:06
поделиться

2 ответа

Неправда.

Насколько я понимаю, ваш вопрос касается вызова 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 '
10
ответ дан 14 December 2019 в 04:46
поделиться

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

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

1
ответ дан 14 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: