программа оболочка для win и программирование

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Аватара пользователя
RuLex
Родился
Сообщения: 9
Зарегистрирован: Пн сен 27, 2010 14:49:25
Откуда: Москва
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение RuLex »

Шутить изволите?
Не "USB1", а "COM1"
Хм... А вообще ведь правда. Щас проверил - листинг доступных для SerialPort портов состоит из единственного COM1. А куча существующих в диспетчере USB-шек отсутствуют в списке. Впрочем, я ведь помню... USB порт может работать как COM, точнее в режиме его эмуляции, тогда по идее SerialPort доступ получит. Вот только мне что-то кажется для этого нужен или драйвер соответствующий, или ещё что. А, и код выше - ругается именно на USB1 :)

ЗЫ: Задумался о смысле жизни - стандарт USB уже лет эдак 10 минимум есть... А компонента в .NET для простой работы с ним - до сих пор не появилось. Странно - хотя вроде говорят есть сторонние, щас погуглил, нашёл что это работается через COM (только не порт, а библиотеки) :) Ну и сторонние библиотеки какие-то. Типа вот: http://www.codeproject.com/KB/cs/USB_HID.aspx Правда всё равно странно :)

ЗЫ2. Вообще интересно, у меня на материнке уже никаких COM-LPT нет, и не предусмотрено. Что определяет компонент - тайна великая еси. Может правда где распаян, а наружу вывода не имеет))) Надо полистать документацию...
Программист это диагноз, отчасти.
Реклама
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Re: программа оболочка для win и программирование

Сообщение PB_EXPERT »

По поводу USB HID, здесь есть инфа http://radiokot.ru/forum/viewtopic.php? ... &start=100
Там можно найти библиотеку HID_Lib_PB.dll и примеры её использования.
Она работает как с нативными прогами, так и с прогами, на платформе .NET
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: программа оболочка для win и программирование

Сообщение Jack_A »

PB_EXPERT писал(а):По поводу USB HID, здесь есть инфа http://radiokot.ru/forum/viewtopic.php? ... &start=100
Там можно найти библиотеку HID_Lib_PB.dll и примеры её использования.
Интересно : будет ли .DLL работать в другой среде - например, в Delphi ?
Посмотрел - вроде этот вопрос уже задавали, но ясности нет. Не то, чтобы я был противник PB, просто на старости лет изучать еще одну среду программирования влом. Хотя с классическим Васиком я в ладах, пришлось даже его взламывать и прикошачивать примочку - исключительно в мирных целях.
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Re: программа оболочка для win и программирование

Сообщение PB_EXPERT »

Да DLL будет работать.
Как-то экспериментировал с этим, но с сожалению проект на Дельфи 7 не могу найти.
Jack_A писал(а):Хотя с классическим Васиком я в ладах
Посмотрите вот на проект работающий в программатором PICkit 2 http://pure-basic.narod.ru/article/pickit2.html
Правда, там используется не DLL, а библиотека функций, поддержки HID девайсов. Но посколько именно на основе этой библиотеки, была создана DLLка, то думаю что не составит труда понять ее работу.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Простите, если не в тему. Вот у меня ситуация. Мне надо, чтобы например клиентская программа (Win98, WinXP) открывала TCP порт и устанавливала соединение с программой-сервером.
Далее клиент и сервер открывают порты COM на своих машинах. То есть мне надо сделать подобие ретранслятора [COM - TCP\IP - COM] в обоих направлениях. С COM портами я знаком и имею кучу вариантов реализации его работы. А вот с реализацией TCP в приложении не очень... :cry:
Подскажите какой - нибудь вариант кода С++ для консольного приложения Win32(для сервера и клиента).
Желательно с использованием WinAPI и попроще. И желательно под Visual Studio 6.0 или VS 2008. Чтобы было так - вбил IP сервера, вбил TCP порт сервера и установил соединение. Сервер, чтоб при запуске открывал тот порт и был готовым для принятия соединений. Мне это надо для связи двух МК по UART через LAN. Гугл какую-то бурду выдаёт.
I am DX168B and this is my favourite forum on internet!
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Вопрос отпадает - нашёл материал и разобрался. Позже буду лепить. :))) :)))
I am DX168B and this is my favourite forum on internet!
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Приветствую всех котов. Есть небольшой вопрос. Подходящей темы не нашёл, буду писать тут.
Собственно вопрос в программировании на C++.
Имеем один массив char query[60]
Мне в него надо забить данные такого рода:
SELECT (свои данные) FROM users WHERE ID=(свои данные)
Свои данные надо добавить из другого массива типа char data[30]
А можно и из двух разных массивов.
Например мне надо выполнить запрос в СУБД такого вида:
SELECT "psw" FROM users WHERE ID="1"
(в кавычках - это данные, которые надо добавить из другого(их) массива(ов)

Как засунуть это всё в один массив?

Позже:
Опять лишнюю панику поднял.
sprintf(char[], const char[]); мне в помощь.
Разобрался.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение avreal »

Только тогда лучше бы
snprintf(char *str, size_t size, const char *format, ...);
Ей передаётся размер принимающего массива и она не вылезет за пределы.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Я в принципе сделал так(кусок кода):

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

int DBquery(const char *column, const char *id)
{
	char query[512];
	sprintf(query, "SELECT '%s' FROM users WHERE ID='%s'", column, id);

	if (mysql_query(&mysql, query))
	{
		display("Ошибка запроса!");
		fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
		_getch(); return 1;
	}
................
........
......
}
Да вот как раз и подумал о переполнении массива query[512] :)
Cпасибо, попробую. :beer:
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Опять решил достать вопросами.
Имеем массив char data[100]
В нём есть данные(записаны цифры и буквы через ";"): bg;1;10;1234;
Как мне раскидать эти значения по разным массивам типа char[20] ?
То есть "bg" в один массив, "1" в другой, "10" в третий и "1234" в четвёртый.
Делал так(тут без значения "bg"):

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

	unsigned int a=0, b=0;
	char data[100], idd[10], idu[10], upsw[20];

		display("Введите данные в формате: IDDevice(4);usrID(4);Password(20);");
		cin >> data;
		while(a<100)
		{
			if (data[a]==';'){a++;b=0;break;}
			idd[b] = data[a];
			a++;
			b++;
		}
		while(a<100)
		{
			if (data[a]==';'){a++;b=0;break;}
			idu[b] = data[a];
			a++;
			b++;
		}
		while(a<100)
		{
			if (data[a]==';'){a=0;b=0;break;}
			upsw[b] = data[a];
			a++;
			b++;
		}
		cout<<idd<<" - "<<idu<<" - "<<upsw<<endl;
		_getch();
В первых двух массивах(idd и idu) получается бурда,
а в последнем(upsw) всё ОК.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18550
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение ARV »

вообще-то есть функция sscanf(), которая как бы и предназначена для разбора введенной пользователем строки... причем может вводить не только строки в массивы, но и сразу числа в переменные, если надо...

ну а раз вы юзаете С++ с его потоками ввода, так надо пользоваться возможностями языка: С++ умеет (собственно, любой язык умеет) вводить значения сразу в переменные и т.п. , не обязательно сначала все в кучу, а потом разбираться...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: программа оболочка для win и программирование

Сообщение DX168B »

Спасибо за совет. :) Я в принципе новичоГ в Си.
А на счёт вводить сразу в свои переменные - нет, мне нужно именно разобрать, так как данные будут приходить в таком виде с микроконтроллера через COM порт. cin>>data; - это, так - чтобы ввести пакет вручную, для проверки своего изврата. Вот этот "пакет" мне и надо будет разбирать на части. На счёт своей ошибки - понял, почему была бурда. Надо было массив читать наоборот и тогда проблем бы небыло, но раз вы подсказали про ф-ю sscanf(); то буду юзать её. :)

Позже:
Ну и намучался я с этой int sscanf(buffer, format-string[, argument...], var,...);
Тоже делала бурду с char. Но так как у меня в буфере только цифры, а первые две буквы предназначаются только другим МК в сети, то решил использовать int. Типа так:

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

	   int idd, idu, upsw;
      char data[100];

		display("Введите данные в формате: bg:'IDDevice(4)'.'usrID(4)'.'Password(20)';");
		cin>>data;

		sscanf(data, "bg:%d.%d.%d;", &idd, &idu, &upsw);

		cout<<idd<<" - "<<idu<<" - "<<upsw<<endl;
		_getch();
Так работает отлично и вроде устраивает.
Всё, с БД закончено(только до ума надо будет довести), с пакетами тоже.
Остался COM порт, но это пустяк - не впервой с ним имел дело. Всем спасибо за помощь. :)
I am DX168B and this is my favourite forum on internet!
Ответить

Вернуться в «Интеграция с ПК»