Хочу сделать так чтобы в моей библиотеке была функция которая смогла бы принять color box, и с ним оперировать, например сменить его цвет, а потом например заполнить этим color boxoм, массив состоящий из color boxoв.
Коротко в чем вопрос:
Как принять и оперировать с константным(я взял его как пример так как не нашел динамического) Color boxом(Кодовой панели), чтобы этими color boxами заполнить массив состоящий из color boxов(Лицевой панели)
Что представляет себе Color box или color box в c++
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Что представляет себе Color box или color box в c++
ColorBox это отображение, а цвет RGB хранится в числе U32 (целое-положительное-32bit), в C++ это unsigned int. Передавать и оперировать соответственно как с числом.
Недавно делал как раз обработку изображения и нужно было разложить цвет на составляющие.
Вот листинг C:
т.е. функция принимает цвет и возвращает составляющие RGB
ну и ее вызов:
Недавно делал как раз обработку изображения и нужно было разложить цвет на составляющие.
Вот листинг 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;
}
ну и ее вызов:
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Re: Что представляет себе Color box или color box в c++
IvanLis, спасибо тебе!
Только 1 вопрос, как работать с error out, где его найти(поиск не ищет кнопку), а то вместо вывода ошибок, просто критует и вылетает.
Только 1 вопрос, как работать с error out, где его найти(поиск не ищет кнопку), а то вместо вывода ошибок, просто критует и вылетает.
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Что представляет себе Color box или color box в c++
Это основная проблема использования библиотек.Oplkill писал(а):Только 1 вопрос, как работать с error out, где его найти(поиск не ищет кнопку), а то вместо вывода ошибок, просто критует и вылетает.
Я не заморачивался по поводу обработки ошибок, но по идее это необходимо реализовывать именно в C++, и делать еще один выходной параметр, который будет выдавать номер ошибки. А потом их уже обрабатывать. Вроде так и реализованы функции в .
Это только мои предположения .
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Что представляет себе Color box или color box в c++
Вот пример работы с кластером 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 можно стереть и вставить вот этот:
Как видно из кода, myErrorString - это описание ошибки, т.е. текстовая информация, записываемая в элемент кластера pError->source, pError->status - наличие или отсутствие ошибки, т.е. логическая переменная, pError->code - целочисленный код ошибки, его можно выбрать по своему усмотрению (только лучше не делать его равным какому-либо стандартному коду LabVIEW, а взять заведомо большие числа).
В всё предельно просто: Возвращаемое значение Return имеет тип Signed 32-bit Integer, остальные опции соответствуют стандартным. Лицевую панель, исходники и прочие мелочи можно посмотреть во вложении.
В 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;
}
}
В всё предельно просто: Возвращаемое значение Return имеет тип Signed 32-bit Integer, остальные опции соответствуют стандартным. Лицевую панель, исходники и прочие мелочи можно посмотреть во вложении.
- Вложения
-
- ErrorProgram.rar
- (1 МБ) 208 скачиваний