Работа с COM. Раннее связывание или interop своими руками.
От: -  
Дата: 20.01.10 07:00
Оценка:
Добрый день.

Есть COM у которого ряд интерфейсов скрыты, т.е. их описание нельзя получить с помощью #import в с++ и с помощью tlbimp.exe в c#.
Вопрос: как работать с такими интерфейсами в C#?

В с++ мы использовали нечто подобное:
описывали сами

const IID IID_IInterface = {0xBB634000,0xA13D,0x0000,{0x00,0x00,0x00,0x40,0x95,0xE1,0xDA,0xEA}};

class IInterface : public IUnknown
{
public: 
STDMETHOD(Method1) (IDispatch*);
STDMETHOD(Method2) (THIS);
STDMETHOD(Method3) (SAFEARRAY**);
};

И потом уже всё просто:
IInterface *ppIInterface=NULL;
ppUnk->QueryInterface(IID_IInterface,(void**)&ppIInterface);

Уважаемые знатоки, как такой финт провернуть на с#?
Re: Работа с COM. Раннее связывание или interop своими рукам
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.01.10 07:27
Оценка:
Здравствуйте, -, Вы писали:

->Уважаемые знатоки, как такой финт провернуть на с#?


Так же. Ручками описываешь интерфейс и вперед.
AVK Blog
Re[2]: Работа с COM. Раннее связывание или interop своими ру
От: Аноним  
Дата: 20.01.10 08:58
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, -, Вы писали:


->>Уважаемые знатоки, как такой финт провернуть на с#?


AVK>Так же. Ручками описываешь интерфейс и вперед.

Можете прислать пример описания и процедуру присвоение. Буде признателен.
Re[2]: Работа с COM. Раннее связывание или interop своими ру
От: mirag_ga Россия  
Дата: 20.01.10 13:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, -, Вы писали:


->>Уважаемые знатоки, как такой финт провернуть на с#?


AVK>Так же. Ручками описываешь интерфейс и вперед.


Как это реализовать? Примерчик можно?
mirag
Re[3]: Работа с COM. Раннее связывание или interop своими ру
От: crable США  
Дата: 20.01.10 13:48
Оценка:
Здравствуйте, mirag_ga, Вы писали:

_>Здравствуйте, AndrewVK, Вы писали:


AVK>>Здравствуйте, -, Вы писали:


->>>Уважаемые знатоки, как такой финт провернуть на с#?


AVK>>Так же. Ручками описываешь интерфейс и вперед.


_>Как это реализовать? Примерчик можно?


Проще всего получить пример сделав в студии "Go to definition" для интерфейса с автоматически сгенерированным описанием. Выглядит это будет примерно так:
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [TypeLibType(TypeLibTypeFlags.FOleAutomation)]
    [Guid("BB634000-A13D-0000-000000495E1DAEA")]
    public interface IInterface
    {
        // пример свойства
        int Count { get; }

        // примеры методов
        string GetDescription();
        void GetGUID(out Guid pGuid);
        void GetHelpContext(out uint pdwHelpContext);
        string GetHelpFile();
        void GetSource(out string pBstrSource);
    }
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[4]: Работа с COM. Раннее связывание или interop своими ру
От: mirag_ga Россия  
Дата: 21.01.10 07:41
Оценка:
Здравствуйте, crable, Вы писали:

C>Здравствуйте, mirag_ga, Вы писали:


_>>Здравствуйте, AndrewVK, Вы писали:


AVK>>>Здравствуйте, -, Вы писали:


->>>>Уважаемые знатоки, как такой финт провернуть на с#?


AVK>>>Так же. Ручками описываешь интерфейс и вперед.


_>>Как это реализовать? Примерчик можно?


C>Проще всего получить пример сделав в студии "Go to definition" для интерфейса с автоматически сгенерированным описанием. Выглядит это будет примерно так:

C>
C>    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
C>    [TypeLibType(TypeLibTypeFlags.FOleAutomation)]
C>    [Guid("BB634000-A13D-0000-000000495E1DAEA")]
C>    public interface IInterface
C>    {
C>        // пример свойства
C>        int Count { get; }

C>        // примеры методов
C>        string GetDescription();
C>        void GetGUID(out Guid pGuid);
C>        void GetHelpContext(out uint pdwHelpContext);
C>        string GetHelpFile();
C>        void GetSource(out string pBstrSource);
C>    }
C>


Премного благодарен. Все работает.
mirag
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.