| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > com-сервер в виде dll-библиотеки |
| Автор: qwerty2 6.1.2011, 13:04 |
| Visual C++ 2008, язык C++ Мое задание состояло в том, чтобы создать простенький com-сервер в виде dll-библиотеки. Методы сервера: отобразить объект на экране, установить координаты, цвет и т.п ничего сверхоригинального. Кое-как это дело я реализовал для Win32, все работало. Пришел сдавать работу, а преподаватель мне сказал, нечего писать на голом Win Api, переделывай для .NET И теперь я не знаю, как мне сделать метод отображения объекта на экране. раньше он отображался с использованием winapi'шных функций, а теперь нужно использовть пространство имен system::drawing Пытался переделать старый проект, но получил ошибку '/clr' Для моей задачи основное это визуализировать объект, может кто-нибудь подскажет, как лучше это сделать, чтоб потом клиент, написанный для .NET, смог использовать эту библиотеку? |
| Автор: log584 6.1.2011, 19:16 | ||
| COM, .NET, Win API, все перемешалось в твоем посте. Поинтересуйся у преподавателя, все - таки какая конкретная задача стоит перед тобой. Какая конктретная технология должна быть выбрана для решения твоей задачи, ну и конечно же точную формализацию твоей задачи, иначе, я думаю, никто не сможет тебе помочь без более детального разбора твоей ситуации. Добавлено через 9 минут и 53 секунды
Если изначально твой "объект" основан на технологии Native "COM", то, я думаю единственный рациональный способ - нужно использовать технологию .NET - "Reflection", которая в изобилии описана в MSDN. |
| Автор: qwerty2 6.1.2011, 19:47 |
| Хорошо, попробую еще раз изложить задачу. Мне нужен COM-клиент для .NET, использующий методы COM-сервера, который в свою очередь реализован в виде dll В частности, я не знаю, как реализовать отображение объекта на экран. Раньше было сделано через hdc,rectangle и прочие подобные функции, а в .NET же такое не пашет. |
| Автор: log584 6.1.2011, 20:34 | ||||||
Понял, пока задача тривиальная. Interoperation - .NET - COM. Давай проект, выкладывай (в виде кода, опять же простого), потому, что пока вопрос вообще общий, разберемся каким образом вызывать методы объектов COM через - Reflection. Потому, что Interoperability by PInvoke именно тот механизм, который тебе нужен будет. Хотя бы один какой - нибудь метод. Добавлено через 2 минуты и 8 секунд
Сейчас - не цель. Добавлено через 6 минут и 42 секунды
Подожди, в чем проблема, вызвать методы COM - сервера из .NET клиента, или "реализовать отображение объекта на экран"? Давай, конкретнее что бы мы в песочнице не игрались. |
| Автор: qwerty2 6.1.2011, 21:24 | ||||
Я так чувствую и то, и другое до конца не понимаю... Чтоб на самом простом разобраться
|
| Автор: log584 6.1.2011, 22:49 | ||||
Понимаешь, да в твоем коде даже разбираться не стоит, я же говорю,
В Native - COM - проекте (по крйней мере в MS VC++2008) нужно определить опцию
в настройках линкера, затем использовать утилиту TlbImp.exe, которая создаст Wrapper для твоего COM- объекта. А вот уже созданная бибилиотека с помощью TlbImp будет содержать объекты - заглушки, которые ты будешь использовать в управляемом коде. |
| Автор: log584 7.1.2011, 10:49 |
| http://narod.ru/disk/2881588001/COMClass.zip.html |
| Автор: qwerty2 8.1.2011, 16:14 |
| Сделал Com через ATL Project в VisualStudio Подскажите, пожалуйста, как в моем методе COM-сервера использовать функции из пространства имен system::drawing? |
| Автор: log584 8.1.2011, 19:44 |
| Зачем? Из любопытства? Наверно, если я правильно понимаю, тут задача чисто в принципе в твоей работе показать что такое возможно и ты умеешь это делать? Что - то твой препод в дебри полез. Лично у меня таких ситуаций не возникало, чтобы в управляемом клиенте использовать неуправляемый код да еще тут же в неуправляемом управляемый. Ну да ладно, тогда чисто теоретически. Созданием оберток Managed(Unmanaged) насколько я знаю занимается Tlbimp.exe, вот с ее помощью в проекте, который я дал создана dll - ка, которую ты подключаешь к управляемому проекту. Наоборот в другую сторону Unmanaged(Managed) делает Tlbexp.exe. Вот тебе, чтобы использовать управляемый тип (его методы) в COM нужно на основе управляемой сборки (dll - файла, ну той сборки, которая содержитв себе типы пространства имен System::Drawing, например) создать файл библиотеки типов .tlb и зарегистрировать эту библиотеку. Но по мотивам MSDN, эти две операции сразу делает утилита Regasm.exe. Описание параметров и их значений можно найти так же в MSDN. А вот полученную и зарегистрированную библиотеку типов ты сможешь использовать в Native коде в твоем COM - методе. Ну вот примерно так. |
| Автор: qwerty2 8.1.2011, 21:45 | ||
Эх, если б из любопытства! По заданию объект (некая геометрическая фигура) должен выводиться на экран с помощью метода из com, каким образом это будет происходить мне не говорили. log584, есть какой попроще способ, кроме способа тобой описанного? |
| Автор: log584 9.1.2011, 17:38 |
| GDI/GDI+ |