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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование C++ класса в проекте C# 
:(
    Опции темы
SullenMan
Дата 14.12.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал простецкий класс на C++/CLI  для того чтобы просто разобраться. Не важно что он делает.
И всё было отлично пока в одном из методов не попробовал передать аргументы по указателю.
Знатоки расскажите как это делать. Лучше с простеньким примеров.
Буду очень вам признателен


PM MAIL   Вверх
skyboy
Дата 14.12.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(SullenMan @  14.12.2006,  14:27 Найти цитируемый пост)
передать аргументы по указателю

__gc-объекты(в отличии от объектов __value-классов) всегда передаются по ссылке. Если надо таким макаром передать __value-объект или "примитив", оборачивая в объект при помощи boxing'a.
PM MAIL   Вверх
SullenMan
Дата 14.12.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



skyboy, 
Можно пример... простецкого класса. Ну к примеру метод возведения в степень... не важно. Просто пример
PM MAIL   Вверх
skyboy
Дата 14.12.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



не, сходу не дам. я слишком недавно в .NET, чтоб набивать в блокноте код, и он не ругался на отсутсвие точек с запятыми, или на некорректный класс из-за другого регистра....
только пара строк(иточник: RSDN):
Код

int    n   = 12345;
object obj = n;        // boxing
int    n2  = (int)obj; // unboxing

obj - это объектная "обертка" вокруг целого числа-примитива, и передаваться в функции будет по ссылке, а не позначению. если обратная распаковка не нужна(например, добавить число в список строк ListBox'a - без обработки и изменения его), можно сделать "оборачивание" на лету:
Код

SomeObj->Add(__box(5));

PM MAIL   Вверх
SullenMan
Дата 14.12.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну ладно, тогда вопрос конкретный
 есть такой класс (привожу его описание так как он есть сейчас)
Код

class CE20_10 
{    

public:
    virtual ~CE20_10(void);
    bool __stdcall Setup(TLogger *, LPCSTR, LPCSTR, LPCSTR);

    virtual int  __stdcall GetParam( int mode, void *value );
    virtual int  __stdcall SetParam( int mode, void *value );
    virtual int  __stdcall Init();

    virtual int  __stdcall PortIO( int mode, int portOfs, void *pAdr, int size );

    virtual int  __stdcall Start( void );
    virtual void __stdcall Stop( void );    
};


мне его надо использовать в C#. Как быть? 
Понимаю что вопрос хм... мягко говоря... Но я только начинаю разбираться с C# и без помощи в этом вопросе быстро не разберусь. А хотелось бы побыстрее.

PM MAIL   Вверх
mr.DUDA
Дата 14.12.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Указатели есть и в шарпе тоже. Хотя, безопаснее передать указатель через IntPtr и замаршалить на байтовый массив через Marshal.Copy

P.S. а речь не идёт, случайно о взаимодействии unmanaged dll с managed приложением ?


--------------------
user posted image
PM MAIL WWW   Вверх
SullenMan
Дата 15.12.2006, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mr.DUDA,
 Есть класс  для работы с платами АЦП.  Исходники в принципе можно править, за это никто не убьёт. Мне надо прицепить плату  к приложению на C#.
PM MAIL   Вверх
archimed7592
Дата 15.12.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(SullenMan @  14.12.2006,  17:50 Найти цитируемый пост)
мне его надо использовать в C#. Как быть? 
Цитата(SullenMan @  15.12.2006,  00:32 Найти цитируемый пост)
 Мне надо прицепить плату  к приложению на C#.
тебе нужно написать обертку (C#->управляемый класс на C++/CLI->неуправляемый код для работы с платой).



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
mr.DUDA
Дата 15.12.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Тогда самый простой способ сделать это - создать обычную dll, экспортирующую функции, и юзать их в C# с пом. [DllImport]. 


--------------------
user posted image
PM MAIL WWW   Вверх
SullenMan
Дата 15.12.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



archimed7592, 
А простенький  примерчик такой конструкции моно посмотреть?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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