реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Прошу помощи в написании простой тестовой программы, Пошаговое обучение программированию в VS2010
Alla_student
сообщение Oct 13 2012, 12:41
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Цитата(XVR @ Oct 13 2012, 13:18) *
...
Вам fox1 привел пример, правда он процентов на 80% избыточен и переусложнен, о чем я и написал

Вы продолжаете не внимательно читать мои ответы, видимо я здесь (в этой теме) совсем не нужна. Повторно: Напишите или точнее приведите свой код для сравнеия без этих 80 прцентов. Так было бы намного понятнее и по теме топика, который я открыла. А так вы только оправдыветесь или как еще это назвать sad.gif
Цитата
C# - это .NET, а он вас не устраивает, как вы сами писали. На MFC попросите fox1 - он похоже на нем писал (я не писал, и не собираюсь)

Опять двадцать пять вы меня не читаете, а только своего апонента фокса номер один - прочитайте внимательно мое сообщение #4 в самом конце, не такой уж думаю сложный код должен быть для программы вывода числа в окно в С# и MFC , а для вас тем более. Я уже смотрю в сторону C# и хотела сравнить величину кода, разницу в подходах к написанию программ на C# и MFC, работу с формами.
На вопрос можно ли сделать так, чтобы программа на C# "носила все всегда с собой", распологалось в одной программной директории, а не ругалось того иили другого нет в системе, установите то то, мне то же никто не ответил.
Цитата
Ваша задача - это не 'пара сотен срок кода', а где то ближе к десятку тысяч. GUI часть очень сильно зависит от библиотеки, о чем я вам и написал

Если 10 тысяч строк кода, то на MFC писать не очень сложное приложение, которое я описала в первом сообщение, это не для меня. И я видела текст более сложных приложений на MFC, там нет 10 000 строк, что то вы здесь лукавите или ошибаетесь.
Цитата
Qt - это библиотека, в том числе и под VS (в том числе и 2010), так что не вижу препядствий в ее использовании

А она кем то поддерживается или отдана в свободное плавание? Не устраивает мое начальство библиотеки "без хозяевЭю
Цитата
Вообще то я пытаюсь уберечь вас от того, что fox1 написал - это не самый лучший вариант ответа на ваш вопрос rolleyes.gif
Вы задали слишком общий вопрос - на него невозможно ответить. Конкретизируйте вопрос - получите ответ

Непонятна ваша реакция с учетом не внимательного чтения моих сообщений, извините, но это больше смахивает на демагогию.

Сообщение отредактировал Alla_student - Oct 13 2012, 12:44
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 13 2012, 13:23
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(XVR @ Oct 13 2012, 15:18) *
Ваша задача - это не 'пара сотен срок кода', а где то ближе к десятку тысяч. GUI часть очень сильно зависит от библиотеки, о чем я вам и написал

ну с подходящей библиотекой всё-таки пара сотен строчек:
что-то вроде:
main.cpp
CODE
#include "ComPort.h"
#include "Fl/Fl.h"
#include "Fl/Fl_Double_Window.h"
#include "Fl/Fl_Box.h"
#include "Fl/Fl_Input.h"
#include "Fl/Fl_Output.h"
#include "Fl/Fl_Check_Button.h"
#include "Fl/Fl_Chart.h"

#pragma comment(lib,"fltk.lib")

Fl_Input * tx;
Fl_Output * rx;
Fl_Box * rx_bit[8];
Fl_Check_Button * tx_bit[8];
Fl_Chart * chart;
ComPort * port;

void Input_cb(Fl_Widget * w, void *p){
int b = strtol(tx->value(),NULL, 16);
for (int i = 0; i < 8; i++){
tx_bit[i]->value(b & 0x01);
b>>=1;
}
}

void InputBit_cb(Fl_Widget * w, void *p){
int b = 0;
for (int i = 0; i < 8; i++){
b>>=1;
if (tx_bit[i]->value()) b |= 0x80;
}
char str[8];
sprintf_s(str,8,"%02X",cool.gif;
tx->value(str);
}

void Send_cb(Fl_Widget * w, void *p){
port->Write(0xCA);
int byte = strtol(tx->value(),NULL,16);
port->Write(byte);
}

void Clear_cb(Fl_Widget * w, void *p){
for (int i = 0; i < 8; i++) tx_bit[i]->value(0);
tx->value("");
}

void Timer_cb(void * p){
static char rxBuff [8];
static int rxNum = 0;
static int num = 0;
while (port->Read(&rxBuff[rxNum],1)){
rxNum += 1;
if (rxBuff[0] != 0xCA) rxNum = 0;
if (rxNum >= 3){
int b = rxBuff[3];
for (int i = 0; i < 8; i++){
rx_bit[i]->color((b & 0x01) ? FL_RED : FL_DARK_RED);
b>>=1;
}
chart->replace(num++, cool.gif;
if (num >= 256){
for (int i = 0; i < 256; i++) chart->replace(i,0);
num = 0;
}
}
}
Fl::repeat_timeout(0.01, Timer_cb);

// chart test:
static double tmp = 10;
static int n = 0;
chart->replace(n,tmp);
tmp+=tmp*0.01;
n++;
if (n >= 256){
for (int i = 0; i < 256; i++) chart->replace(i,0);
n = 0;
tmp = 10;
}
//
}

int main(){
ComPort p("COM1", 9600);
port = &p;
Fl_Double_Window w(800,600,"test");
rx = new Fl_Output(100,0,200,50,"Rx");
rx->textsize(50);
rx->labelsize(50);

for (int i = 0; i < 8; i++){
rx_bit[i] = new Fl_Box(250 - i*20,100,20,20);
rx_bit[i]->align(FL_ALIGN_TOP);
char str[2] = {i+'0',0};
rx_bit[i]->copy_label(str);
rx_bit[i]->color(FL_RED);
rx_bit[i]->box(FL_BORDER_BOX);
}

tx = new Fl_Input(100,200,200,50,"Tx");
tx->textsize(50);
tx->labelsize(50);
tx->callback(Input_cb);
tx->when(FL_WHEN_CHANGED);
tx->align();
for (int i = 0; i < 8; i++){
tx_bit[i] = new Fl_Check_Button(250 - i*20,300,20,20);
tx_bit[i]->align(FL_ALIGN_TOP);
char str[2] = {i+'0',0};
tx_bit[i]->copy_label(str);
tx_bit[i]->callback(InputBit_cb);
}

Fl_Button * b_send = new Fl_Button(100,400,100,50,"Send");
b_send->callback(Send_cb);
Fl_Button * b_clear = new Fl_Button(200,400,100,50,"Clear");
b_clear->callback(Clear_cb);

chart = new Fl_Chart(350,0,400,400);
chart->type(FL_LINE_CHART);
chart->maxsize(256);
for (int i = 0; i < 256; i++) chart->add(0);
chart->bounds(0,256);

w.end();
w.show();
Fl::add_timeout(0.01, Timer_cb);
return Fl::run();
}


ComPort.h

CODE
#ifndef __COMPORT_H_
#define __COMPORT_H_

#include <windows.h>

class ComPort{
private:
HANDLE hCom;
int opened;
char * luaBuff;
int lastReadNum;
public:
~ComPort();
ComPort();
ComPort(const char * comPortStr,int speed, int byteSize = 8, int parity = 0, int stopBit = 0);
int Init(const char * comPortStr,int speed, int byteSize = 8, int parity = 0, int stopBit = 0);
int SetBaudRate(int speed);
void Close ();
int Read(char * c,int num);
const char * Read(int num = 1024);
int LastReadNum();
int Status();
int Writef(char * str, ...);
int Write(char *c, int num);
int Write(char *c);
int Write(char c);
int Rts(int level);
int Dtr(int level);
int Cts();
int Dsr();
int Ri();
int Dcd();
void ClearTxBuff();
void ClearRxBuff();
int RxBuffNum();
};

#endif


ComPort.cpp
CODE
#include "comPort.h"
#include <stdarg.h>
#include <stdio.h>

void ComPort::ClearTxBuff(){
PurgeComm(hCom,PURGE_TXCLEAR);
}

void ComPort::ClearRxBuff(){
PurgeComm(hCom,PURGE_RXCLEAR);
}

int ComPort::SetBaudRate(int speed){
DCB dcb;
GetCommState( hCom, &dcb );
dcb.BaudRate = speed ;
if ( !SetCommState( hCom, &dcb ) ){
// CloseHandle(hCom);
return 1; //SetCommState error
}
return 0;
}

int ComPort::Status(){
unsigned int stat;
GetCommModemStatus(hCom, (LPDWORD)&stat);
return stat;
}

int ComPort::Cts(){
return Status() & MS_CTS_ON ? 1 : 0;
}

int ComPort::Dsr(){
return Status() & MS_DSR_ON ? 1 : 0;
}

int ComPort::Ri(){
return Status() & MS_RING_ON ? 1 : 0;
}

int ComPort::Dcd(){
return Status() & MS_RLSD_ON ? 1 : 0;
}


int ComPort::Rts(int level){
DCB dcb;
GetCommState( hCom, &dcb );
dcb.fRtsControl = level ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE;
if ( !SetCommState( hCom, &dcb ) ){
// CloseHandle(hCom);
return 1; //SetCommState error
}
return 0;
}

int ComPort::Dtr(int level){
DCB dcb;
GetCommState( hCom, &dcb );
dcb.fDtrControl = level ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE;
if ( !SetCommState( hCom, &dcb ) ){
// CloseHandle(hCom);
return 1; //SetCommState error
}
return 0;
}

ComPort::~ComPort(){
Close();
delete[] luaBuff;
}

ComPort::ComPort(){
lastReadNum = 0;
opened = 0;
luaBuff = new char[2]; luaBuff[0]=0; luaBuff[1]=0;
}

ComPort::ComPort(const char * comPortStr,int speed, int byteSize, int parity, int stopBit){
lastReadNum = 0;
opened = 0;
luaBuff = new char[2]; luaBuff[0]=0; luaBuff[1]=0;
Init(comPortStr,speed,byteSize,parity,stopBit);
}

/* Initialize Communication port */
int ComPort::Init(const char * comPortStr,int speed, int byteSize, int parity, int stopBit){
DCB dcb;

COMMTIMEOUTS CommTimeOuts ;
if ( ( hCom = CreateFile (comPortStr, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ) )
== INVALID_HANDLE_VALUE ) {
return 1; // error
}
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;

if ( !SetCommTimeouts( hCom, &CommTimeOuts )){
CloseHandle(hCom);
return 2; // SetCommTimeouts error
}

dcb.DCBlength = sizeof ( DCB ) ;
dcb.BaudRate = speed ;
dcb.fBinary = TRUE ;
dcb.fParity = 0;
dcb.fOutxCtsFlow = 0; // CTS output flow control
dcb.fOutxDsrFlow = 0; // DSR output flow control
dcb.fDtrControl = 0;//DTR_CONTROL_ENABLE; // DTR flow control type

dcb.fDsrSensitivity = 0; // DSR sensitivity
dcb.fTXContinueOnXoff = 0; // XOFF continues Tx
dcb.fOutX = 0; // XON/XOFF output flow control
dcb.fInX = 0; // XON/XOFF input flow control

dcb.fErrorChar = 0; // enable error replacement
dcb.fNull = 0; // enable null stripping
dcb.fRtsControl = 0;//RTS_CONTROL_ENABLE; // RTS flow control

dcb.fAbortOnError = 0; // abort reads/writes on error
dcb.XonLim = 0; // transmit XON threshold
dcb.XoffLim = 0; // transmit XOFF threshold
dcb.ByteSize = byteSize; // number of bits/byte, 4-8
dcb.Parity = parity; // 0-4=no,odd,even,mark,space
dcb.StopBits = stopBit; // 0,1,2 = 1, 1.5, 2
dcb.XonChar = 0; // Tx and Rx XON character
dcb.XoffChar = 0; // Tx and Rx XOFF character
dcb.ErrorChar = 0; // error replacement character
dcb.EofChar = 0; // end of input character
dcb.EvtChar = 0; // received event character
if ( !SetCommState( hCom, &dcb ) ){
CloseHandle(hCom);
return 3; //SetCommState error
}
opened = 1;
return(0);
}

/* Close Communication port */
void ComPort::Close (){
if (opened!=1) return;
opened = 0;
CloseHandle( hCom );
}

int ComPort::RxBuffNum(){
COMSTAT stat;
unsigned long err;
ClearCommError(hCom, &err, &stat);
return stat.cbInQue;
}

int ComPort::Read(char * c,int num){
DWORD length = 0;
if( !ReadFile(hCom, c, num, &length, NULL) ) return 0;
return length;
}

const char * ComPort::Read(int num){
delete luaBuff;
luaBuff = new char[num];
memset(luaBuff, 0, num);
lastReadNum = Read(luaBuff, num);
return luaBuff;
}

int ComPort::LastReadNum(){
return lastReadNum;
}

/*
Send a character
*/

int ComPort::Write(char *c, int num){
DWORD length = 0;
WriteFile(hCom, c, num, &length, NULL);
return length;
}

int ComPort::Write(char c){
DWORD length;
return WriteFile(hCom, &c, 1, &length, NULL);
}

int ComPort::Write(char * c){
DWORD length;
int num = 0;
while (c[num]) num += 1;
return WriteFile(hCom, c, num, &length, NULL);
}

int ComPort::Writef(char * str, ...){
char tmpStr[1024];
va_list args;
va_start (args, str);
vsprintf_s (tmpStr, 1024, str, args);
va_end (args);
return Write(tmpStr);
}


Прикрепленное изображение


встроенный Fl_Chart страшненький конечно, но для начала пойдёт,
а вообще и MathGL лекго прикручивается если красивые графики нужны ну или gnuplot.
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 13 2012, 18:26
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Цитата(_pv @ Oct 13 2012, 16:23) *
ну с подходящей библиотекой всё-таки пара сотен строчек:
что-то вроде:
...
#pragma comment(lib,"fltk.lib")
...
встроенный Fl_Chart страшненький конечно, но для начала пойдёт,
а вообще и MathGL лекго прикручивается если красивые графики нужны ну или gnuplot.


Спасибо. Если вы компилировали проект, судя по картинке, то не могли бы приаттачить к сообщению все файлы проекта для VS2010?
Сразу вопросы:

Как прикручивается и где берется стабильная версия этой библиотеки, включая описание?
Вы не могли бы прокомментировать в коде кратко технологию открытия окон и передачи парметров, данных меду окнами?

Есть ли другие аналогичные библиотеки для MFC?
C базой SQL работу вы не реализовывали, насколько я поняла?

Цитата(Genadi Zawidowski @ Oct 12 2012, 19:12) *
Вот так выглядела моя программа, написанная по похожему как у Вас ТЗ. Только без базы.
MFC.
Интересуют исходники?

Предложили и пропали sad.gif Жаль...

Спрошу по другому, если я многих Гуру здесь напугала с написанием тестовой - учебной прграммы:

Из перечисленных требований к программе хочется понять как работать:

1) Работа с COM портом. Прием и передача простых 2-х и 3-х байтовых пакетов.
2) Работа с базой данных SQL инициализация, открытие, запись (желательно чтение) полей, закрытие. Возможно что то я не учла.
3) Вывод форматированных данных в окно большим шрифтом (что то типа индикатора, дисплея).
4) Вывод бинарных данных в поле имитирующее светодиоды.
5) Опрос поля Checkbox (хотелось конечно, чтобы было поле выключателей OFF/ON).
6) Работа с Plot функцикей - вывод графика.
Дополнительно - этого нет выше:
7) Вывод принятых данных в виде лога (в скролинговое окно - забыла как оно точно называется) и в тектовый файл, который то же надо открыть или создать, если его нет, ну и закрыть после работы с ним.

Может кто в теме и может помочь, то опубликует код, а поспробую из кусочков с общей помощью собрать эту программку?!

Ну и в дополнение еще вопрос: В VS2010 два типа создания проектов - C++ с NET и C# в чем эти проекты принципиально отличаются кроме синтаксиса (я предпологаю)?

Сообщение отредактировал Alla_student - Oct 13 2012, 19:05
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 13 2012, 19:49
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Alla_student @ Oct 14 2012, 00:26) *
Спасибо. Если вы компилировали проект, судя по картинке, то не могли бы приаттачить к сообщению все файлы проекта для VS2010?
Как прикручивается и где берется стабильная версия этой библиотеки, включая описание?
В коде вы не могли бы прокомментировать кратко технологию открытия окон и передача парметров, данных меду окнами?
Есть ли другие аналогичные библиотеки для MFC?

1) Прикрепленный файл  test.zip ( 140.62 килобайт ) Кол-во скачиваний: 69
там просто пустой консольный проект, в котором только добавлены пути к FLTK в свойствах проекта и юникод выключен, а то CreateFile в ComPort.cpp требует юникодную строку в качестве имени порта, а не char *.
2) первая же сслыка в гугле по слову fltk приведёт на станицу данной библиотеки. стабильная версия 1.3.0, документация в разделе download рядом с самой библиотекой. прикручивается просто добавлением #pragma comment(lib,"fltk.lib") ну или в свойствах проекта добавить, и указанием путей до fltk.lib линкеру, а также до директории FL с заголовочными файлами.
чтобы собрать fltk, достаточно заглянуть в директорию ide, там будет солюшен и для vs2010: fltk.sln. Ну и собирать лучше Release, а не Debug который там по умолчанию.
3) окно создаётся собственно при создании объекта окна: Fl_Window * w = new Fl_Window(x,y,w,h,label);
метод show() делает его видимым.
до вызова метода end() создаваемые виджеты добавляются в данное окно.
у виджетов можно зарегистрировать callback функции которые они будут звать при наступлении определённых событий (нажатие на кнопку, изменение текста).
в примере выше еще есть callback от таймера Fl::add_timeout(), который каждые 10мс проверяет не пришло ли чего в последовательный порт, и обновляет график.
Fl::run() запускает основной цикл обработки gui.
4) что значит библиотеки для MFC? http://en.wikipedia.org/wiki/List_of_widget_toolkits

Цитата(Alla_student @ Oct 14 2012, 00:26) *
Из перечисленных требований к программе хочется понять как работать:
1)...

а что именно не понятно?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 13 2012, 21:08
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Да не пропал я...

Вы упомянули о хотении добавлять записи в sql базу... Я делал для себя обёртку над ADODB, к сожалению плохо приспособлена для передачи кому-то, а исходинки (архив проектов, который надо передавать для такого случая) занимает под несколько мегабайт.
Принцип - срисован с persistent layer какого-то явовского проекта.

Отдельно существуют классы, описывающие структуру базы данных. А использование - вот такое (заполнение некоего списка из двух колонок на экране:

Код
void CPultsNamesDlg::fromDatabase()
{
    VERIFY(m_lstPults.DeleteAllItems());

    CAbonentsBriefVo vo(lConnection.getConnection());
    CTrue t1;

    COrderBy ord0(vo, vo.chnl, false);


    COrdersList ordlist;
    ordlist.AddTail(& ord0);

    PARS rs;
    CVariantPtrList results;    // list of fields to set results from recordset

    if (!vo.select(& t1, & ordlist, rs, results))
        return;

    while (! rs->BOF && ! rs->adoEOF)
    {
        vo.fillResults(rs, results);
        //
        const long chnl = V_I4(& vo.chnl.value);
        vo.abdescription.value.ChangeType(VT_BSTR);

        CString sChnl;

        sChnl.Format(_T("%ld"), chnl + 1);
        //
        int iTem = m_lstPults.InsertItem(INT_MAX, sChnl);
        m_lstPults.SetItemText(iTem, 1, V_BSTR(& vo.abdescription.value));
        m_lstPults.SetItemData(iTem, V_I4(& vo.id.value));

        //
        rs->MoveNext();
    }
    updateButtons();    
}



Код
////////////////////////////////
//
class CAbonentsEntity : public CEntity
{
public:
    CFieldDef id;        // primary key field
    CFieldDef ts;
    CFieldDef chnl;
    CFieldDef abdescription;

    CAbonentsEntity() :
        id(_T("ABONENT_ID"), ADODB::adInteger, * this),
        ts(_T("TS"), ADODB::adBigInt, * this),
        chnl(_T("CHANNEL"), ADODB::adInteger, * this),
        abdescription(_T("ABDESCRIPTION"), ADODB::adVarWChar, * this)
    {

    }
        
    //
    // This function should be implemented in delivered classes
    // Name of database table holding this entity
    virtual CString getEntityName() const
    {
        return _T("RE_ABONENTS");
    }

    //
    // This function should be implemented in delivered classes
    // Name of database table holding this entity
    virtual const CFieldDef & getPKFieldDef() const
    {
        return id;
    }
    virtual const CFieldDef & getTsFieldDef() const
    {
        return ts;
    }

};

extern const CAbonentsEntity abonentsEntity;


Сообщение отредактировал Genadi Zawidowski - Oct 13 2012, 21:21
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 15 2012, 00:04
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Вопрос ко всем: Насколько я поняла, в VS2010 конструктор форм для проектов C++ native не предусмотрен, а есть ли какие то стороние программы, плугины для визуальной разработки форм для VS2010 MFC? Может есть какая то универсальная утилита, чтобы подходила кроме VS еще например к Pelles?

Сообщение отредактировал Alla_student - Oct 15 2012, 00:09
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 15 2012, 05:34
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(Alla_student @ Oct 13 2012, 16:41) *
А она кем то поддерживается или отдана в свободное плавание? Не устраивает мое начальство библиотеки "без хозяев

http://qt.nokia.com, собственник Digia Plc.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 15 2012, 08:00
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Alla_student @ Oct 13 2012, 16:41) *
Вы продолжаете не внимательно читать мои ответы, видимо я здесь (в этой теме) совсем не нужна. Повторно: Напишите или точнее приведите свой код для сравнеия без этих 80 прцентов. Так было бы намного понятнее и по теме топика, который я открыла. А так вы только оправдыветесь или как еще это назвать sad.gif
Запросы у вас однако wacko.gif Такое впечатление, что все долджны бросить свои дела и начать строчить вам код laughing.gif
Могу поделится готовым -

Общение с COM портом:
Код
void start_com_port()
{
com_port_h=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
DCB dcb={sizeof(DCB),9600,TRUE,FALSE,
          FALSE,FALSE,DTR_CONTROL_DISABLE,FALSE,TRUE,FALSE,
          FALSE,FALSE,FALSE,RTS_CONTROL_DISABLE,FALSE,0,0,
          0,0,8,NOPARITY,TWOSTOPBITS,0,0,0,0,0,0};
SetCommState(com_port_h,&dcb);
static COMMTIMEOUTS ctout = {300,1,2000,100,10000}; // Поместите сюда настройки по таймаутам для вашей железки
SetCommTimeouts(com_port_h,&ctout);
_beginthread(work_thread,0,0);
}

__cdecl void work_thread(void*)
{
for(;;)
  {
   int buffer=0;
   DWORD l;
   if (ReadFile(com_port_h,&buffer,3,&l,NULL) && l==3) PostMessage(main_window,WM_USER,buffer,0);
  }
}

void send_message(const char* buffer, size_t length)
{
DWORD l;
WriteFile(com_port_n,buffer,length,&l,NULL);
}
main_window - HWND главного окна вашего приложения. Принятые байты будут приходить туда в виде сообщения WM_USER
Для отправки сообщений предназначенна процедура send_message
Контроль ошибок отсуствует (надо добавить)

Работа с SQL сервером: Интерфейс к самому серверу зависит от сервера. Можно взять ADO интерфейс - срастется со всеми серверами, но он не очень простой. У меня есть пример для MySQL и его native интерфейс
Код
my_handle=mysql_init(NULL);
mysql_real_connect(my_handle,NULL,"UserName","UserPassword","YourScheme",0,0,CLIENT_COMPRESS);

...

mysql_real_query(my_handle,"insert into YourTable values(1,2,3)");

...

mysql_shutdown(my_handle);



Цитата
Опять двадцать пять вы меня не читаете, а только своего апонента фокса номер один - прочитайте внимательно мое сообщение #4 в самом конце, не такой уж думаю сложный код должен быть для программы вывода числа в окно в С# и MFC , а для вас тем более.
Гы, код для вывода числа вам врядли поможет. Там гораздо больше кода будет для того, что бы собрать это все вместе. Но если вам так надо, то вот (Это Builder, нл в C# будет практически то же самое, с точностью до заменты -> на . и имен полей. Ну и sprintf на что то родное заменится)
Код
char b[18]; sprintf(b,"%02X %02X %02X",b[0],b[1],b[2]);
YourTextField->Text=b;
Сильно помогло? rolleyes.gif

Цитата
Я уже смотрю в сторону C# и хотела сравнить величину кода, разницу в подходах к написанию программ на C# и MFC, работу с формами.
Для MFC нет дезайнера форм (максимум редактор диалогов). В C# он есть, на и вообще - C# полноценный RAD тул, а MFC таковым не является
Цитата
На вопрос можно ли сделать так, чтобы программа на C# "носила все всегда с собой", распологалось в одной программной директории, а не ругалось того иили другого нет в системе, установите то то, мне то же никто не ответил.
C# требует .NET runtime. Вы можете включить соответствующий пакет в дистрибутив, но ставится он в любом случае будет в систему. Кроме того, в последних Windows уже стоят разные версии .NET (хотя могут быть и не самые свежие)

Цитата
Если 10 тысяч строк кода, то на MFC писать не очень сложное приложение, которое я описала в первом сообщение, это не для меня. И я видела текст более сложных приложений на MFC, там нет 10 000 строк, что то вы здесь лукавите или ошибаетесь.
Ну может на 10000, но 1000 будет точно rolleyes.gif

Цитата
А она кем то поддерживается или отдана в свободное плавание? Не устраивает мое начальство библиотеки "без хозяевЭю
Библиотека под GPL, хозяин (на сегодня) - Nokia. Развивается и поддерживается очень серьезно. На сегодняшний день это пожалуй библиотека №1 среди кросс платформенных решений.

Цитата
Непонятна ваша реакция с учетом не внимательного чтения моих сообщений, извините, но это больше смахивает на демагогию.
Я очень внимательно читал все ваши сообщения, но так и не смог до вас донести, что писать с нуля примеры, которые вы хотите, вам никто не будет - слишком они объемные.
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 15 2012, 10:03
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Цитата(XVR @ Oct 15 2012, 11:00) *
Запросы у вас однако wacko.gif Такое впечатление, что все долджны бросить свои дела и начать строчить вам код laughing.gif
Могу поделится готовым -

Я указывала, что по желанию и в свободное время (привести номер моего сообщения здесь или сами увидите?), а говорите, что внимательно читаете sad.gif
Цитата
Работа с SQL сервером: Интерфейс к самому серверу зависит от сервера. Можно взять ADO интерфейс - срастется со всеми серверами, но он не очень простой. У меня есть пример для MySQL и его native интерфейс
Код
my_handle=mysql_init(NULL);
mysql_real_connect(my_handle,NULL,"UserName","UserPassword","YourScheme",0,0,CLIENT_COMPRESS);
...
mysql_real_query(my_handle,"insert into YourTable values(1,2,3)");
...
mysql_shutdown(my_handle);

Спасибо, поглядим
Цитата
Гы, код для вывода числа вам врядли поможет. Там гораздо больше кода будет для того, что бы собрать это все вместе. Но если вам так надо, то вот (Это Builder, нл в C# будет практически то же самое, с точностью до заменты -> на . и имен полей. Ну и sprintf на что то родное заменится)
Код
char b[18]; sprintf(b,"%02X %02X %02X",b[0],b[1],b[2]);
YourTextField->Text=b;
Сильно помогло? rolleyes.gif

Похоже на издевку sad.gif Я написала - код всего приложения, а не одной функции вывода, которую прекрасно знаю. Опять не внимательно читали. Тем более, если для C# все так просто. А для MFC из за большого объема не приводить здесь, но спасибо, я это сравнение по величене кода уже в интернете нашла.
Цитата
Для MFC нет дезайнера форм (максимум редактор диалогов).

И здесь вы ошибаетесь - я на шла уже в менеджере проектов - для проверсии VS2010 MFC есть.
Цитата
В C# он есть, на и вообще - C# полноценный RAD тул, а MFC таковым не является
C# требует .NET runtime. Вы можете включить соответствующий пакет в дистрибутив, но ставится он в любом случае будет в систему. Кроме того, в последних Windows уже стоят разные версии .NET (хотя могут быть и не самые свежие)

Проблема. которую описывает мое начальство заключается в том, что при установке такого пакета, инсталлятор начинает спрашивать такие вещи, как в системе установлена более поздняя версия и устанавливать, при дальнейших действиях перестает работать софт уже предустановленный и требующий фреймворк или не работает, который установили.
Цитата
Библиотека под GPL, хозяин (на сегодня) - Nokia. Развивается и поддерживается очень серьезно. На сегодняшний день это пожалуй библиотека №1 среди кросс платформенных решений.

Я это знаю, но прогуглите это в интернете и найдете для себя много интересного - Nokia отказывается от дальнейшей поддержи Qt.
Цитата
Я очень внимательно читал все ваши сообщения,

Извините, но не похоже, см. выше
Цитата
но так и не смог до вас донести, что писать с нуля примеры, которые вы хотите, вам никто не будет - слишком они объемные.

Наверно не правильно вам за других отвечать, лучше отвечайте за себя
А по поводу моей просьбы в шапке - я уже нашла в интернете, что хотела и нет там не 1000 строк для MFC и нет сторонних библиотек. Компактно, красиво, доходчиво.
Поэтому всем, кто пытался здесь мне помочь - Большое спасибо!

Сообщение отредактировал Alla_student - Oct 15 2012, 16:51
Go to the top of the page
 
+Quote Post
fox1
сообщение Oct 15 2012, 10:46
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 3-05-06
Из: Нижний Новгород
Пользователь №: 16 725



Насчет SECURITY_ATTRIBUTES sm.gif))

lpSecurityAttributes - pointer to the SECURITY_ATTRIBUTES structure which specifies if the descriptor returned can be inherited by the child procedures. If lpSecurityAttributes is NULL, the descriptor cannot be inherited.

Windows NT: lpSecurityDescriptor member of the SECURITY_ATTRIBUTES structure defines the protection descriptor for the object. If lpSecurityAttributes is NULL the object gets the default protection descriptor. The system of the end file must support the protection on files and folders for this parameter to apply this effect to the files.

Windows 95: lpSecurityDescriptor member of the SECURITY_ATTRIBUTES structure is ignored.

lpSecurityDescriptor Адрес дескриптора безопасности для объекта, который контролирует совместное владение им. Если этот член равен NULL, то для объекта назначается дескриптор безопасности по умолчанию для текущего процесса.

lpSecurityDescriptor

A pointer to a SECURITY_DESCRIPTOR structure that controls access to the object. If the value of this member is NULL, the object is assigned the default security descriptor associated with the access token of the calling process. This is not the same as granting access to everyone by assigning a NULL discretionary access control list (DACL). By default, the default DACL in the access token of a process allows access only to the user represented by the access token.

For information about creating a security descriptor, see Creating a Security Descriptor.


у меня же там многозадачность ... три независимых потока .... а порт один ... и асинхронность важна ... Overlapped I/O sm.gif)

Overlapped I/O is not as straightforward as nonoverlapped I/O, but allows more flexibility and efficiency. A port open for overlapped operations allows multiple threads to do I/O operations at the same time and perform other work while the operations are pending. Furthermore, the behavior of overlapped operations allows a single thread to issue many different requests and do work in the background while the operations are pending.


По поводу дизайнера форм - все там есть (можно конечно это назвать это дизайнером диалогов, сути не меняет), под MFC вы можете создать SDI, MDI и Dialog Based приложение.

Создание приложения MFC
http://msdn.microsoft.com/ru-ru/library/9es9d1k4.aspx

книжек по MFC полно
купить
http://www.ozon.ru/context/detail/id/90544/

скачать
http://rutracker.org/forum/viewtopic.php?t=89854
http://rutracker.org/forum/viewtopic.php?t=991026
http://c2p.ru/cpp/a-meshkov-yu-tixomirov-visual-c-i-mfc.html

ни чего в MFC сложного нет sm.gif))
да ... кода будет много ... C# намного проще
да и систем без FrameWorkа давно уже нет sm.gif)))
он везде нужен sm.gif))

вот готовое

CSerialPort v1.27 An MFC class for Win32 serial ports
http://www.naughter.com/serialport.html

Serial library for C++
http://www.codeproject.com/Articles/992/Serial-library-for-C

CSerialCom - A Simple Class for Implementing Serial Communication in Win-9X/2000
http://www.codeproject.com/Articles/2973/C...ementing-Serial

Dynamic LED Control
http://www.codeproject.com/Articles/2654/Dynamic-LED-Control

Static LED Control
http://www.codeguru.com/cpp/controls/contr...LED-Control.htm

An MFC Chart Control with Enhanced User Interface
http://www.codeproject.com/Articles/317712...-User-Interface

VCTERM
http://msdn.microsoft.com/en-us/library/ms...v=vs.71%29.aspx
http://melfarihi.free.fr/mfc/general/vcterm/

A communication class for serial port
http://www.codeguru.com/cpp/i-n/network/se...serial-port.htm

MFC class for serial communication
http://www.codeforge.com/article/490

Sending Commands in Visual C++ ( With MFC ) to ADR Interfaces
http://ontrak.net/mfc.htm




Сообщение отредактировал fox1 - Oct 15 2012, 13:14
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 16 2012, 10:47
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(fox1 @ Oct 15 2012, 14:46) *
Windows NT: lpSecurityDescriptor member of the SECURITY_ATTRIBUTES structure defines the protection descriptor for the object. If lpSecurityAttributes is NULL the object gets the default protection descriptor. The system of the end file must support the protection on files and folders for this parameter to apply this effect to the files.

lpSecurityDescriptor Адрес дескриптора безопасности для объекта, который контролирует совместное владение им. Если этот член равен NULL, то для объекта назначается дескриптор безопасности по умолчанию для текущего процесса.
Так и есть. И чем он 'дескриптор безопасности по умолчанию для текущего процесса' не угодил?

Цитата
у меня же там многозадачность ... три независимых потока .... а порт один ...
MultiThreading != MultiTasking. Независимые потоки не требуют наследуемых дескрипторов портов, и установки безопасности по умолчанию их тоже устроят.

Цитата
и асинхронность важна ... Overlapped I/O sm.gif)
Вам да, а вот ТС нет. Я не говорю, что Overlapped IO вообще не нужен - просто он не нужен в задаче ТС

Цитата
По поводу дизайнера форм - все там есть (можно конечно это назвать это дизайнером диалогов, сути не меняет), под MFC вы можете создать SDI, MDI и Dialog Based приложение.
Залез в VS2010, создал приложение MFC. Дизайнера форм (в понимании RAD системы) не нашел - банальный редактор диалогов. Но есть развитые визарды, которые автоматически создают все необходимые классы и переменные для всех контролов диалога. С ActiveX работать умеет. Так что для создания приложения для ТС подойдет.

Цитата
ни чего в MFC сложного нет sm.gif))
С этим никто не спорит
Цитата
да ... кода будет много ... C# намного проще
В этом и суть - MFC отмирает в пользу .NET причем с рекордной скоростью. Изучать его сейчас с нуля смысла нет - можно не успеть применить на практике полученные знания rolleyes.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 16 2012, 10:57
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



-- дубль получился
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 16 2012, 11:21
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(XVR @ Oct 16 2012, 13:47) *
Залез в VS2010, создал приложение MFC. Дизайнера форм (в понимании RAD системы) не нашел - банальный редактор диалогов.

Дизайнер форм есть (точно такой же как в C#), но нужно создавать не MFC приложение, а Windows Form Application.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 16 2012, 11:24
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(_Артём_ @ Oct 16 2012, 15:21) *
Дизайнер форм есть (точно такой же как в C#), но нужно создавать не MFC приложение, а Windows Form Application.
fox1 нашел там какой то дизайнер форм для MFC приложения, вот я и в недоумении wacko.gif
Для WFA там дизайнер конечно есть, но это тот самый .NET, о который тут сломано столько копий rolleyes.gif
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 20 2012, 12:33
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Вопрос по QT -> QT c официального сайта Nokia скачивается как еволюшин 30 дней, можно его как то подлечить на предмет продления жизненного цикла?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.0159 секунд с 7
ELECTRONIX ©2004-2016