![]() |
|
![]() ![]() ![]() |
|
qwerty2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.5.2010 Репутация: нет Всего: нет |
Visual C++ 2008, язык C++
Мое задание состояло в том, чтобы создать простенький com-сервер в виде dll-библиотеки. Методы сервера: отобразить объект на экране, установить координаты, цвет и т.п ничего сверхоригинального. Кое-как это дело я реализовал для Win32, все работало. Пришел сдавать работу, а преподаватель мне сказал, нечего писать на голом Win Api, переделывай для .NET И теперь я не знаю, как мне сделать метод отображения объекта на экране. раньше он отображался с использованием winapi'шных функций, а теперь нужно использовть пространство имен system::drawing Пытался переделать старый проект, но получил ошибку '/clr' Для моей задачи основное это визуализировать объект, может кто-нибудь подскажет, как лучше это сделать, чтоб потом клиент, написанный для .NET, смог использовать эту библиотеку? |
|||
|
||||
log584 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
COM, .NET, Win API, все перемешалось в твоем посте.
Поинтересуйся у преподавателя, все - таки какая конкретная задача стоит перед тобой. Какая конктретная технология должна быть выбрана для решения твоей задачи, ну и конечно же точную формализацию твоей задачи, иначе, я думаю, никто не сможет тебе помочь без более детального разбора твоей ситуации. Добавлено через 9 минут и 53 секунды
Если изначально твой "объект" основан на технологии Native "COM", то, я думаю единственный рациональный способ - нужно использовать технологию .NET - "Reflection", которая в изобилии описана в MSDN. |
|||
|
||||
qwerty2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.5.2010 Репутация: нет Всего: нет |
Хорошо, попробую еще раз изложить задачу.
Мне нужен COM-клиент для .NET, использующий методы COM-сервера, который в свою очередь реализован в виде dll В частности, я не знаю, как реализовать отображение объекта на экран. Раньше было сделано через hdc,rectangle и прочие подобные функции, а в .NET же такое не пашет. |
|||
|
||||
log584 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
Понял, пока задача тривиальная. Interoperation - .NET - COM. Давай проект, выкладывай (в виде кода, опять же простого), потому, что пока вопрос вообще общий, разберемся каким образом вызывать методы объектов COM через - Reflection. Потому, что Interoperability by PInvoke именно тот механизм, который тебе нужен будет. Хотя бы один какой - нибудь метод. Добавлено через 2 минуты и 8 секунд
Сейчас - не цель. Добавлено через 6 минут и 42 секунды
Подожди, в чем проблема, вызвать методы COM - сервера из .NET клиента, или "реализовать отображение объекта на экран"? Давай, конкретнее что бы мы в песочнице не игрались. |
||||||
|
|||||||
qwerty2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.5.2010 Репутация: нет Всего: нет |
Я так чувствую и то, и другое до конца не понимаю... Чтоб на самом простом разобраться
|
||||
|
|||||
log584 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
Понимаешь, да в твоем коде даже разбираться не стоит, я же говорю,
В Native - COM - проекте (по крйней мере в MS VC++2008) нужно определить опцию
в настройках линкера, затем использовать утилиту TlbImp.exe, которая создаст Wrapper для твоего COM- объекта. А вот уже созданная бибилиотека с помощью TlbImp будет содержать объекты - заглушки, которые ты будешь использовать в управляемом коде. Это сообщение отредактировал(а) log584 - 7.1.2011, 09:24 |
||||
|
|||||
log584 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
||||
|
||||
qwerty2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.5.2010 Репутация: нет Всего: нет |
Сделал Com через ATL Project в VisualStudio
Подскажите, пожалуйста, как в моем методе COM-сервера использовать функции из пространства имен system::drawing? |
|||
|
||||
log584 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
Зачем? Из любопытства? Наверно, если я правильно понимаю, тут задача чисто в принципе в твоей работе показать что такое возможно и ты умеешь это делать? Что - то твой препод в дебри полез.
Лично у меня таких ситуаций не возникало, чтобы в управляемом клиенте использовать неуправляемый код да еще тут же в неуправляемом управляемый. Ну да ладно, тогда чисто теоретически. Созданием оберток Managed(Unmanaged) насколько я знаю занимается Tlbimp.exe, вот с ее помощью в проекте, который я дал создана dll - ка, которую ты подключаешь к управляемому проекту. Наоборот в другую сторону Unmanaged(Managed) делает Tlbexp.exe. Вот тебе, чтобы использовать управляемый тип (его методы) в COM нужно на основе управляемой сборки (dll - файла, ну той сборки, которая содержитв себе типы пространства имен System::Drawing, например) создать файл библиотеки типов .tlb и зарегистрировать эту библиотеку. Но по мотивам MSDN, эти две операции сразу делает утилита Regasm.exe. Описание параметров и их значений можно найти так же в MSDN. А вот полученную и зарегистрированную библиотеку типов ты сможешь использовать в Native коде в твоем COM - методе. Ну вот примерно так. Это сообщение отредактировал(а) log584 - 8.1.2011, 19:48 |
|||
|
||||
qwerty2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 1.5.2010 Репутация: нет Всего: нет |
Эх, если б из любопытства! По заданию объект (некая геометрическая фигура) должен выводиться на экран с помощью метода из com, каким образом это будет происходить мне не говорили. log584, есть какой попроще способ, кроме способа тобой описанного? |
|||
|
||||
log584 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.1.2010 Репутация: нет Всего: нет |
GDI/GDI+
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |