![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Linus |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Вот интересная штука получается. Написал dll библиотеку на C#, в которой есть такой код:
Потом сделал tlh-файл:
После чего создал на С++ Win32 Comsole Application:
Код скомпилировался. И пространство имён MakingBases3, и класс Program С++ увидела. А вот метода StartBank() в классе Program никак не хочет видеть. В чём я виноват? P.S. Класс Program интеллисенс увидел как структуру. |
||||||
|
|||||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
если не ошибаюсь, то ты должен создать интерфейс, потом - класс, его реализующий. И на клиенте работать не с твоим классом, а с интерфейсом.
Будет что-то типа
Это сообщение отредактировал(а) tol05 - 18.10.2007, 08:14 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
tol05, большое спасибо, сейчас попробую.
И ещё: только что скачал небольшую презентацию, так там написано:
Значит нельзя использовать статические переменные/классы. Сейчас буду пробовать, о результатах отпишусь. |
|||
|
||||
| Linus |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
tol05, спп ругается на MakingBases3::IStart istart (над этим интерфейсом я тоже повесил атрибут СomVisible(true)):
В пространстве имён MakingBases3 в intellisence светятся:
Чем отличаются друг от друга _Program от Program для меня загадка... Это сообщение отредактировал(а) Linus - 18.10.2007, 09:12 |
||||
|
|||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Уже повесил на interface Istart атроибут [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)], и с бубном танцевал, и до сих пор не могу в C++ создать экземпляр класса Program:
Чего ж ему конструктор по умолчанию не угодил? Так... Исследования продолжаются.... Это сообщение отредактировал(а) Linus - 18.10.2007, 09:42 |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
сейчас имею отношения (или со мной имеет отношения
|
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
правильно, я и убрал static из своего кода. пропиши в классе конструктор явно
поищи книгу "C#2005 для профессионалов". Там неплохие примеры есть. А у меня счас ее нет, а сам - не помню -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Linus |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
аха, я потом увидел, как свой пост опубликовал
Прописывал (конструктор без параметров). Бестолку, всё равно ругалось (no appropriate default constructor available)...
Дык на полке лежит) Уже нашёл, сейчас читаю... (я по Троелсену пытался разбирать, и забыл за эту книжку) |
||||||
|
|||||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Ура, получилось! К сожалению мне сейчас убегать надо, как домой приду напишу сюда пример.
|
|||
|
||||
| Linus |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: 1 Всего: 4 |
Итак, чтобы народ впредь так не мучился в поисках вразумительных примеров чтобы понять суть дела, кратко разжёвываю (самый необходимый минимум):
Сначала пишем класс на .NET (назовём сборку NetClass), который потом будем использовать в комовском коде:
Скомпилировали в dll. Прежде, чем компонент .NET может быть использован как объект COM, его необходимо сконфигурировать в реестре и создать CCW (COM Callable Wrapper) – вызываемую оболочку, через которую будут взаимодействовать клиент COM c объектом NET. В Visual Studio 2005 Command Prompt:
Так… Сборку зарегистрировали, при том в папке bin\Debug рядом с NetClass.dll появился NetClass.tlb (это наш COM Callable Wrapper). Теперь пишем клиента (создаём на С++ Win32 Console Application):
P.S. Спасибо участникам форума, Кристиану Нейгелу, Биллу Ивьену и другим авторам за активное содействие в написании поста) Это сообщение отредактировал(а) Linus - 18.10.2007, 17:15 Присоединённый файл ( Кол-во скачиваний: 10 )
UsingNetFromComProjects.zip 36,19 Kb |
||||||||
|
|||||||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 8 Всего: 17 |
Все же непонятно - могу ли я в дотнете создать comvisible сборку dll и из дотнетовской же программы юзать ее при помощи dllimport? Ничего не получилось у меня. Почему спрашиваю - ни на чем другом писать не умею, а протестировать надо как-то.
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
нет не можешь. На самом деле никакой COM сборки .Net не создает, а создает только врапперы для ее COM-visibility (я имею в виду CCW и RCW).
когда ты пытаешься присоединить эту сборку в студии, CLR читает .Net манифест сборки и видит, что это - .Net сборка и подключать ее нужно через Add Reference. Когда мне нужно было тестировать свою сборку - я тестировал ее на реальном COM-сервере. Единственное, что могу посоветовать - это разбить сборку на части, где одна будет выступать в роли COM-visible объекта, другие будут обычными .Net библиотеками и содержать логику работы. Тогда ты сможешь тестировать работу в обычном режиме Add Reference, а при работе с сервером - он будет тянуть твою COM-visible сборку, а она - остальные .Net-библиотеки. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 8 Всего: 17 |
Пришлось поднять тему из небытия.
Проясните один момент, плиз! Видимо если .NET Framework не установлен на машине, то все, о чем здесь говорилось, не сработает? Ответ и так почти ясен (нет), но не хватает твердой уверенности. -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| alexsid1982 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.3.2008 Репутация: нет Всего: нет |
Для твердой уверенности:
Нет не сработает. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |