Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание объекта класса из неуправляемого кода, Неуправляемый код в управляемом 
:(
    Опции темы
Brain89
Дата 19.10.2011, 14:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Подскажите, пожалуйста, варианты решения такой проблемы. Есть класс, написанный на C++. У него несколько методов и свойств в открытом доступе. Мне необходимо создать объект этого класса уже в управляемом коде на C#. Как это сделать, чтобы полностью не переписывать код? Заранее спасибо.

Это сообщение отредактировал(а) Brain89 - 19.10.2011, 14:08
PM   Вверх
jonie
Дата 19.10.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



в явном виде никак из чистого .net такое не сделать.
Вариаты решения задачи:
1) сделать ваш класс COM классом и использовать его уже в C# "как обычно"
2) сделать переходник на C++ CLI который с одной стороны будет выглядеть как managed класс, но внутренее использовать вызовы к вашему unmanaged классу (гугл про паттерн "декоратор", "прокси").


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 20.10.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



2jonie
COM - слишком трудоемко было бы для моей небольшой программы, а C++ CLI оказался в самый раз. Спасибо. В принципе, нужно было самому лучше msdn читать smile
Еще очень помогла вот эта статья, может, кому пригодится: хабр

А так я все обернул с помощью Proxy, и без проблем подгрузил в свой проект на C# .NET.

Это сообщение отредактировал(а) Brain89 - 20.10.2011, 16:02
PM   Вверх
Brain89
Дата 21.10.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



Захотел прикрутить еще кое-что, и возникла одна проблема. Можно ли генерировать в неуправляемом классе событие, на которое требуется повесить обработчик из управляемого кода? Сделать что-то типа такого:

Код

#pragma unmanaged
class ClassUnmanaged
{
     public:    
        ...
        void Function1(type1 Arg1, type2 Arg2)
        {
           // Генерировать событие
        }
        ...
}

#pragma managed
public ref class ClassManaged
{
      public:
        ClassManaged()
        {
            // Подписаться на событие
        }
        ...


PM   Вверх
jonie
Дата 21.10.2011, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



можно. Только в старом добром Си++ нет событий, есть callback функции. http://www.codeguru.com/forum/showthread.php?t=380116


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 24.10.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: 2
Всего: 2



2jonie
Спасибо, хороший пример.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.