Ошибка CS1545 с конкретными свойствами объекта COMC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка CS1545 с конкретными свойствами объекта COM

Сообщение Anonymous »

Я делаю автоматизацию COM с сторонней библиотекой. При попытке получить доступ к определенным свойствам мне нужно использовать obj.get_property () вместо obj.property .
Это, кажется, происходит только для свойств типа string , которые имеют как Getter, так и сеттер. это.
edit - Дополнительная информация:
  • Целевое приложение автоматизации поставляется с библиотеками типа в .tlb, который визуально используется для создания библиотек меж. />
    using System;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;
    using NS0;

    namespace NS1
    {
    [ComImport]
    [Guid("AAAAAAAA-BBBB-CCCC-DDDD-000000000000")]
    [TypeLibType(1234)]
    public interface SpecialDocument : Document
    {
    //...
    [DispId(1234567890)]
    new string Name
    {
    [MethodImpl(MethodImplOptions.InternalCall)]
    [DispId(1234567890)]
    [return: MarshalAs(UnmanagedType.BStr)]
    get;
    [MethodImpl(MethodImplOptions.InternalCall)]
    [DispId(1234567890)]
    [param: In]
    [param: MarshalAs(UnmanagedType.BStr)]
    set;
    }
    //...
    [DispId(1234567891)]
    new string FullName
    {
    [MethodImpl(MethodImplOptions.InternalCall)]
    [DispId(1234567891)]
    [return: MarshalAs(UnmanagedType.BStr)]
    get;
    }
    //...
    [DispId(1234567892)]
    new bool IsVisible
    {
    [MethodImpl(MethodImplOptions.InternalCall)]
    [DispId(1234567892)]
    get;
    [MethodImpl(MethodImplOptions.InternalCall)]
    [DispId(1234567892)]
    [param: In]
    set;
    }
    }


    В приведенном выше фрагменте кода из определенных свойств 3, только name должно быть доступно с get_name или set_name . Другие свойства получают доступ, как можно было бы ожидать в c#.
  • Оба name и fullname наследуют от родительского класса документа , определяемых на ns0 , где они имеют одинаковое определение. idispatch .
edit - Добавление шагов Repro:

Приобретать лицензию для Fancysoft и установить продукт. /> Import Com Справочник. /> cs1545 < /li>
< /ol>
edit - Дополнительная информация из .tlb (извлечено с помощью oleview.exe): < /strong> < /p>
// From "dispinterface Document":
[
uuid(AAAAAAAA-BBBB-CCCC-DDDD-111111111111),
helpcontext(0x00001111),
dual
]
dispinterface Document {
properties:
methods:
// ...
[id(0x76543210), propget, helpcontext(0x00001234)]
BSTR Name();
[id(0x76543210), propput, helpcontext(0x00001234)]
void Name([in] BSTR* rhs);
// ...
};

// From "interface Document":
[
odl,
uuid(AAAAAAAA-BBBB-CCCC-DDDD-111111111111),
helpcontext(0x00001111),
dual,
oleautomation
]
interface Document : BaseObject {
// No member description for the 'Name' property.
};

// From "dispinterface BaseObject":
[
uuid(AAAAAAAA-BBBB-CCCC-DDDD-222222222222),
helpcontext(0x00002222),
dual
]
dispinterface BaseObject {
properties:
methods:
// ...
[id(0x76543210), propget, helpcontext(0x00001234)]
BSTR Name();
[id(0x76543210), propput, helpcontext(0x00001234)]
void Name([in] BSTR* rhs);
// ...
};

// From "interface BaseObject":
[
odl,
uuid(AAAAAAAA-BBBB-CCCC-DDDD-222222222222),
helpcontext(0x00002222),
dual,
oleautomation
]
interface BaseObject : BaseDispatch {
// ...
[id(0x76543210), propget, helpcontext(0x00001234)]
HRESULT Name([out, retval] BSTR* oNameBSTR);
[id(0x76543210), propput, helpcontext(0x00001234)]
HRESULT Name([in] BSTR* oNameBSTR);
// ...
};


Подробнее здесь: https://stackoverflow.com/questions/774 ... properties
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»