Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подключение com компонента к C# проекту / 11 сообщений из 11, страница 1 из 1
08.07.2013, 17:42
    #38324553
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
Необходимо подключить сторонний com компонент в проект с#.
Раннее с com компонентами работать не приходилось. Судя по всему, в Visual Studio достаточно возспользоваться Add references, чтобы работать с com компонентом также, как и с любой .NET сборкой. Но при попытке добавить com компонент таким образом, VS сильно сомневается в том, что...
Microsoft Visual Studioit ia a valid assembly or COM component
Автор компонента утверждает, что:
Автор компонентаИзначально, совместимости с COM не было, т.е. интерфейс начинался не с методов IUnknown, однако, были реализованы первые 3 метода, так, как это нужно в COM-интерфейсе. Отметим, что никакого мусора в реестр не пишется (и из пушки стрельбы по воробьям не производится), по сему, с помощью CoCreateInstance этого интерфейса получить нельзя. Было сделано по аналогии с Direct3D, т.е. для получения указателя на интерфейс нужно вызвать вполне конкретную функцию, которую экспортирует вполне конкретная DLL.
Википедия говорит, что все части DirectX API представляют собой наборы COM-совместимых объектов. Следовательно, можно добавить через add references и, например, d3d9.dll. Но при попытке это сделать студия, как и в примере со сторонней библиотекой, посылает меня далеко и надолго.
Так что нужно com компоненту, чтобы добавляться в проек через add references в vs или быть преобразованным с помощью Tlbimp.exe (что-то мне подсказывает, что это выполняется в фоне)? d3d9.dll - это com компонент? Если да, то почему он не добавляется через add references? Если нет, то как с ним работать? Как с обычным unmanaged кодом? Но стороняя библотека экспортирует только какой-то интерфейс, а не все необходимые мне функции. Нужно как-то достукиваться к ним через этот интерфейс. Как?
...
Рейтинг: 0 / 0
08.07.2013, 17:59
    #38324577
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
almunt,

А может попросить автора сего бесценного творения прислать пример работы с классами из DLL?
А потом уже можно думать об unmanaged code...
...
Рейтинг: 0 / 0
08.07.2013, 18:11
    #38324595
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
Alex Kuznetsov,
зачем? в моем случае речь не идет о проблемах использования функционала компонента. У меня скорее проблемы доступа к нему. Компонент написан на С++. Примеров использования компонента в .net проектах нет.
...
Рейтинг: 0 / 0
08.07.2013, 18:15
    #38324604
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
almuntТак что нужно com компоненту, чтобы добавляться в проек через add referencesОбратиться к автору, попросить его написать tlb.
...
Рейтинг: 0 / 0
08.07.2013, 18:33
    #38324635
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
Antonariy,
Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь?
...
Рейтинг: 0 / 0
08.07.2013, 19:43
    #38324720
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
almuntAntonariy,
Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь?А что Вы думаете, происходит при подключении COM компонента через Add Reference?
А вот что ( источник ):
...
1.Найдите компонент COM для использования и зарегистрируйте его.Используйте файл regsvr32.exe для регистрации или отмены регистрации COM DLL.

2.
Добавьте к проекту ссылку на компонент COM или библиотеку типов.

При добавлении ссылки Visual Studio использует Tlbimp.exe (программа экспорта библиотек типов), принимающее библиотеку типов в качетстве входных данных, для вывода сборки взаимодействия .NET Framework.Сборка, также называемая "вызываемая оболочка времени выполнения" (RCW) содержит управляемые классы и интерфейсы, которые являются оболочкой для COM-классов и интерфейсов, находящихся в библиотеке типов.Visual Studio добавляет к проекту ссылку на созданную сборку.
...

Так что, попробуйте всё-же запросить у производителя "COM компоненты" пример использования.
В конечном итоге - это их работа...
Думаю с них не убудет...
...
Рейтинг: 0 / 0
08.07.2013, 22:12
    #38324838
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
almuntAntonariy,
Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь?Наличие tlb файла - это обязательное условие для подключения библиотеки в референсах.

Конечно, можно работать и без всего этого, но сложнее. Для этого требуется полное понимание того, как устроен COM, IUnknown и желательно IDispatch , хотя он скорее всего в этой либе не реализован.

Возможно получится прикинуться шлангом с помощью кода из этой темы (потребуется конвертация VB6 -> VB.NET -> C# с помощью VS2008), но шансов мало.

Самое простое это то, что я сказал ранее. Для автора это дело нескольких минут, VS умеет генерировать tlb.
...
Рейтинг: 0 / 0
11.07.2013, 14:22
    #38328151
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
Всем спасибо за участие в решении проблемы.
Получил новые сведения.
Предоставляемая мне библиотека реализована как com компонент (реализация методов IUnknown), но в тоже время не предназначена для регистрации в системе (Нет GUID, tlb файла и прочих атрибутов). Я вообще сомневаюсь, что эту библиотеку можно назвать com компонентом. Или можно? Если учитывать реализацию IUnKnown?

dll экспортирует одну единственную функцию
...
Рейтинг: 0 / 0
11.07.2013, 14:27
    #38328165
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
...сори

Код: plaintext
1.
extern "C" IExample *CreateExample();



т.е. я могу получить ссылку на экземпляр некоего интерфейса
...
Рейтинг: 0 / 0
11.07.2013, 14:33
    #38328180
almunt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
...еще раз сори

моя задача: определить на шарпе нужный интерфейс и дернуть этот метод. Результат пытаюсь примести к нужному интерфейсному типу. Как-то так в общем
Код: c#
1.
2.
        [DllImport("bla.dll", EntryPoint = "CreateExample", ExactSpelling = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
        public static extern IExample Create();



Такая попытка заканчивается так

Код: html
1.
2.
InvalidCastException:
{"Интерфейс не поддерживается (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))"}



Кто-то знает возможную причину?
...
Рейтинг: 0 / 0
11.07.2013, 15:56
    #38328324
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение com компонента к C# проекту
almunt,

IExample - это что?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подключение com компонента к C# проекту / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]