|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
Необходимо подключить сторонний 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 кодом? Но стороняя библотека экспортирует только какой-то интерфейс, а не все необходимые мне функции. Нужно как-то достукиваться к ним через этот интерфейс. Как? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 17:42 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
almunt, А может попросить автора сего бесценного творения прислать пример работы с классами из DLL? А потом уже можно думать об unmanaged code... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 17:59 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, зачем? в моем случае речь не идет о проблемах использования функционала компонента. У меня скорее проблемы доступа к нему. Компонент написан на С++. Примеров использования компонента в .net проектах нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 18:11 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
almuntТак что нужно com компоненту, чтобы добавляться в проек через add referencesОбратиться к автору, попросить его написать tlb. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 18:15 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
Antonariy, Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 18:33 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
almuntAntonariy, Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь?А что Вы думаете, происходит при подключении COM компонента через Add Reference? А вот что ( источник ): ... 1.Найдите компонент COM для использования и зарегистрируйте его.Используйте файл regsvr32.exe для регистрации или отмены регистрации COM DLL. 2. Добавьте к проекту ссылку на компонент COM или библиотеку типов. При добавлении ссылки Visual Studio использует Tlbimp.exe (программа экспорта библиотек типов), принимающее библиотеку типов в качетстве входных данных, для вывода сборки взаимодействия .NET Framework.Сборка, также называемая "вызываемая оболочка времени выполнения" (RCW) содержит управляемые классы и интерфейсы, которые являются оболочкой для COM-классов и интерфейсов, находящихся в библиотеке типов.Visual Studio добавляет к проекту ссылку на созданную сборку. ... Так что, попробуйте всё-же запросить у производителя "COM компоненты" пример использования. В конечном итоге - это их работа... Думаю с них не убудет... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 19:43 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
almuntAntonariy, Наличие tlb файла - это обязательное условие при использовании компонента? Вроде можно юзать компонент и без него? Или я ошибаюсь?Наличие tlb файла - это обязательное условие для подключения библиотеки в референсах. Конечно, можно работать и без всего этого, но сложнее. Для этого требуется полное понимание того, как устроен COM, IUnknown и желательно IDispatch , хотя он скорее всего в этой либе не реализован. Возможно получится прикинуться шлангом с помощью кода из этой темы (потребуется конвертация VB6 -> VB.NET -> C# с помощью VS2008), но шансов мало. Самое простое это то, что я сказал ранее. Для автора это дело нескольких минут, VS умеет генерировать tlb. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2013, 22:12 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
Всем спасибо за участие в решении проблемы. Получил новые сведения. Предоставляемая мне библиотека реализована как com компонент (реализация методов IUnknown), но в тоже время не предназначена для регистрации в системе (Нет GUID, tlb файла и прочих атрибутов). Я вообще сомневаюсь, что эту библиотеку можно назвать com компонентом. Или можно? Если учитывать реализацию IUnKnown? dll экспортирует одну единственную функцию ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:22 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
...сори Код: plaintext 1.
т.е. я могу получить ссылку на экземпляр некоего интерфейса ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:27 |
|
Подключение com компонента к C# проекту
|
|||
---|---|---|---|
#18+
...еще раз сори моя задача: определить на шарпе нужный интерфейс и дернуть этот метод. Результат пытаюсь примести к нужному интерфейсному типу. Как-то так в общем Код: c# 1. 2.
Такая попытка заканчивается так Код: html 1. 2.
Кто-то знает возможную причину? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:33 |
|
|
start [/forum/topic.php?fid=20&msg=38324595&tid=1404373]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
131ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 248ms |
0 / 0 |