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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вместо cli::array<Type,dimension> ^ обычный массив 
:(
    Опции темы
iff
Дата 30.4.2014, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Работаю с компонентом SerialPort. Устройство посылает данные в виде последовательности из 6-ти знаковых слов (int16_t). Нужно принять их.
Например есть метод:
http://msdn.microsoft.com/ru-ru/library/ms...(v=vs.110).aspx
Как проще его использовать если программа работает вот с таким обычным массивом:
Код

int16_t *data;

Можно ли преобразовать тип? Или лучше переделать что бы все функции работали с cli::array?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
iff
Дата 30.4.2014, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Сделал так:

в объявлении формы
Код

array<unsigned char>^ tvec;

в конструкторе
Код

tvec = gcnew array<unsigned char>(12);

а в функции
Код

    serialPort1->Read(tvec, 0, 12);
    for (int i = 0; i < 12; i++) ((unsigned char*)data)[i] = tvec[i];

правда лишний tvec (((
a с cli::array<int16_t> не компилируется т.к. там нужен cli::array<unsigned char> или байт


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
xvr
Дата 5.5.2014, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(iff @  30.4.2014,  23:00 Найти цитируемый пост)
Или лучше переделать что бы все функции работали с cli::array?

Лучше это. В .net вообще не рекомендуется работать с голыми указателями и non-managed массивами, т.к. это не безопасно. Если уж используете .net платформу, то используйте все ее возможности  smile 

PM MAIL   Вверх
DarthTon
Дата 6.5.2014, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно так
Код

array<unsigned char>^ arr = gcnew array<unsigned char>( 12 );
pin_ptr<unsigned char> pArr = &arr[0];
int16_t* ptr = reinterpret_cast<int16_t*>(pArr);

Ну и естественно после того как pin_ptr выйдет из области видимости, нет никаких гарантий о сохранности unmanaged адреса. Но вообще, да, как сказал xvr, лучше везде работать с едиными типами.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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