none
C# Как создать и передать IDispatch в COM DLL RRS feed

  • Вопрос

  • На C# надо подключить DLL работающую по COM технологии.

    Подключение COM-DLL и вызов из нее функций я написал - документации море.
    Но вот в одной функции DLL требует чтобы ей в качестве параметра передали указатель на IDispatch.
    B в этом указателе на IDispatch было реализовано два стандартых COM интерфейса : IMsgBox и IPlatformInfo

    На C# такое можно сделать?
    Если да то можно которенький примерчик?

    10 июня 2016 г. 13:13

Ответы

  • В таком случае декларуйте нужные интерфесы в C# (в ручную, через MIDL/TLBIMP или создав interop assembly автоматически), создаете класс который их реализует, передаете его в COM.

    Процедура в общем примерно такая же как описано тут:

    https://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx

    Первая часть поможет задекларировать интерфейс в C#:

    https://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx


    This posting is provided "AS IS" with no warranties, and confers no rights.

    10 июня 2016 г. 22:15
    Модератор

Все ответы

  • Уточните: вам надо написать код своего собственного объекта которые реализуют эти два интерфейса или же вам надо просто передать существующий COM объект который реализует эти два интерфейса?


    This posting is provided "AS IS" with no warranties, and confers no rights.

    10 июня 2016 г. 15:51
    Модератор
  • Вы "руками" пишете COM wrapper для C#? Для данной DLL отсутствует библиотека типа?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    10 июня 2016 г. 20:20
  • Уточните: вам надо написать код своего собственного объекта которые реализуют эти два интерфейса или же вам надо просто передать существующий COM объект который реализует эти два интерфейса?

    1-ое. Мне нужно на C# сэмулировать IDispatch с двумя интерфейсами и передать его в COM DLL в качестве параметра функции этой DLL.
    10 июня 2016 г. 20:54
  • Есть .idl файл.

    10 июня 2016 г. 20:56
  • Я спрашивал про наличие библиотеки типа. Если она декларирована в idl, то, скорее всего, присутствует в самой dll в виде ресурса. А, следовательно, управляемую обертку для этой dll можно сделать автоматически средствами VS, либо .NET SDK. В этой обертке никаких указателей на IDispatch быть не должно, а будет, скорее всего, ссылка на Object.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    10 июня 2016 г. 21:07
  • В таком случае декларуйте нужные интерфесы в C# (в ручную, через MIDL/TLBIMP или создав interop assembly автоматически), создаете класс который их реализует, передаете его в COM.

    Процедура в общем примерно такая же как описано тут:

    https://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx

    Первая часть поможет задекларировать интерфейс в C#:

    https://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx


    This posting is provided "AS IS" with no warranties, and confers no rights.

    10 июня 2016 г. 22:15
    Модератор