Что представляет себе Color box или color box в c++

Создание приложений, библиотек, инсталляторов
Ответить
Аватара пользователя
Oplkill
beginner
beginner
Сообщения: 11
Зарегистрирован: 21 мар 2013, 18:08
Версия LabVIEW: 12.0

Что представляет себе Color box или color box в c++

Сообщение Oplkill »

Хочу сделать так чтобы в моей библиотеке была функция которая смогла бы принять color box, и с ним оперировать, например сменить его цвет, а потом например заполнить этим color boxoм, массив состоящий из color boxoв.

Коротко в чем вопрос:
Как принять и оперировать с константным(я взял его как пример так как не нашел динамического) Color boxом(Кодовой панели), чтобы этими color boxами заполнить массив состоящий из color boxов(Лицевой панели)
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Что представляет себе Color box или color box в c++

Сообщение IvanLis »

ColorBox это отображение, а цвет RGB хранится в числе U32 (целое-положительное-32bit), в C++ это unsigned int. Передавать и оперировать соответственно как с числом.

Недавно делал как раз обработку изображения и нужно было разложить цвет на составляющие.
Вот листинг C:

Код: Выделить всё

void ColorToRGB (unsigned int Color, unsigned char *R, unsigned char *G, unsigned char *B);
// ------------------------------------------------------------
void ColorToRGB (unsigned int Color, unsigned char *R, unsigned char *G, unsigned char *B)
{
	*R = (Color >> 16) & 0xFF;
	*G = (Color >> 8) & 0xFF;
	*B = (Color) & 0xFF;
}
т.е. функция принимает цвет и возвращает составляющие RGB
ну и ее вызов:
1.png
1.png (21.33 КБ) 5512 просмотров
Аватара пользователя
Oplkill
beginner
beginner
Сообщения: 11
Зарегистрирован: 21 мар 2013, 18:08
Версия LabVIEW: 12.0

Re: Что представляет себе Color box или color box в c++

Сообщение Oplkill »

IvanLis, спасибо тебе!
Только 1 вопрос, как работать с error out, где его найти(поиск не ищет кнопку), а то вместо вывода ошибок, :labview: просто критует и вылетает.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Что представляет себе Color box или color box в c++

Сообщение IvanLis »

Oplkill писал(а):Только 1 вопрос, как работать с error out, где его найти(поиск не ищет кнопку), а то вместо вывода ошибок, :labview: просто критует и вылетает.
Это основная проблема использования библиотек.
Я не заморачивался по поводу обработки ошибок, но по идее это необходимо реализовывать именно в C++, и делать еще один выходной параметр, который будет выдавать номер ошибки. А потом их уже обрабатывать. Вроде так и реализованы функции в :labview: .

Это только мои предположения :crazy: .
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Что представляет себе Color box или color box в c++

Сообщение dadreamer »

Вот пример работы с кластером Error In - Error Out.

В Microsoft Visual Studio выбираем в меню File -> New -> Project -> Win32 -> Win32 Project, вводим имя проекта (Name) и местоположение (Location). Далее выбираем ОК, Next, задаём тип приложения (Application type): DLL, нажимаем Finish. Теперь надо задать опции проекта (Project -> Properties):
вкладка Configuration Properties -> C/C++ -> General:
В поле Additional Include Directories вводим путь до папки cintools, содержащейся в каталоге LabVIEW, например C:\Program Files (x86)\National Instruments\LabVIEW 2011\cintools.
В поле Detect 64-bit Portability Issues ставим No.
вкладка Configuration Properties -> Linker -> General:
В поле Additional Library Directories вводим тот же самый путь до папки cintools.
вкладка Configuration Properties -> Linker -> Input:
В поле Additional Dependencies вводим odbc32.lib odbccp32.lib labview.lib.
На этом в принципе всё, уже существующий код в вашем cpp можно стереть и вставить вот этот:

Код: Выделить всё

#include "stdafx.h"
#include "extcode.h"

#pragma pack(1)
typedef struct
{
   LVBoolean status;
   int32 code;
   LStrHandle source;
} LVError;
#pragma pack()

extern "C" {
__declspec (dllexport) MgErr myFunction(LVError *pError);

char myErrorString[] = "Произошла ошибка!";

__declspec (dllexport) MgErr myFunction(LVError *pError)
{
   int32 len = strlen(myErrorString);
   MgErr err = NumericArrayResize(uB, 1, (UHandle*)&(pError->source), len);

   if (err)
     return err;

   MoveBlock(myErrorString, LStrBuf(*(pError->source)), len);
   LStrLen(*(pError->source)) = len;

   pError->status = LVTRUE;
   pError->code = 123456;

   return err;
}
}
Как видно из кода, myErrorString - это описание ошибки, т.е. текстовая информация, записываемая в элемент кластера pError->source, pError->status - наличие или отсутствие ошибки, т.е. логическая переменная, pError->code - целочисленный код ошибки, его можно выбрать по своему усмотрению (только лучше не делать его равным какому-либо стандартному коду LabVIEW, а взять заведомо большие числа).
В :labview: всё предельно просто:
Error.png
Error.png (12.3 КБ) 5473 просмотра
CLFN01.jpg
CLFN02.jpg
Возвращаемое значение Return имеет тип Signed 32-bit Integer, остальные опции соответствуют стандартным. Лицевую панель, исходники и прочие мелочи можно посмотреть во вложении.
Вложения
ErrorProgram.rar
(1 МБ) 206 скачиваний
Ответить

Вернуться в «Создание приложений»