|
|
  |
Прошу помощи в написании простой тестовой программы, Пошаговое обучение программированию в VS2010 |
|
|
|
Oct 13 2012, 12:41
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146

|
Цитата(XVR @ Oct 13 2012, 13:18)  ... Вам fox1 привел пример, правда он процентов на 80% избыточен и переусложнен, о чем я и написал Вы продолжаете не внимательно читать мои ответы, видимо я здесь (в этой теме) совсем не нужна. Повторно: Напишите или точнее приведите свой код для сравнеия без этих 80 прцентов. Так было бы намного понятнее и по теме топика, который я открыла. А так вы только оправдыветесь или как еще это назвать  Цитата C# - это .NET, а он вас не устраивает, как вы сами писали. На MFC попросите fox1 - он похоже на нем писал (я не писал, и не собираюсь) Опять двадцать пять вы меня не читаете, а только своего апонента фокса номер один - прочитайте внимательно мое сообщение #4 в самом конце, не такой уж думаю сложный код должен быть для программы вывода числа в окно в С# и MFC , а для вас тем более. Я уже смотрю в сторону C# и хотела сравнить величину кода, разницу в подходах к написанию программ на C# и MFC, работу с формами. На вопрос можно ли сделать так, чтобы программа на C# "носила все всегда с собой", распологалось в одной программной директории, а не ругалось того иили другого нет в системе, установите то то, мне то же никто не ответил. Цитата Ваша задача - это не 'пара сотен срок кода', а где то ближе к десятку тысяч. GUI часть очень сильно зависит от библиотеки, о чем я вам и написал Если 10 тысяч строк кода, то на MFC писать не очень сложное приложение, которое я описала в первом сообщение, это не для меня. И я видела текст более сложных приложений на MFC, там нет 10 000 строк, что то вы здесь лукавите или ошибаетесь. Цитата Qt - это библиотека, в том числе и под VS (в том числе и 2010), так что не вижу препядствий в ее использовании А она кем то поддерживается или отдана в свободное плавание? Не устраивает мое начальство библиотеки "без хозяевЭю Цитата Вообще то я пытаюсь уберечь вас от того, что fox1 написал - это не самый лучший вариант ответа на ваш вопрос Вы задали слишком общий вопрос - на него невозможно ответить. Конкретизируйте вопрос - получите ответ Непонятна ваша реакция с учетом не внимательного чтения моих сообщений, извините, но это больше смахивает на демагогию.
Сообщение отредактировал Alla_student - Oct 13 2012, 12:44
|
|
|
|
|
Oct 13 2012, 13:23
|
Гуру
     
Группа: Свой
Сообщений: 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",  ; 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++,  ; 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.
|
|
|
|
|
Oct 13 2012, 18:26
|
Частый гость
 
Группа: Участник
Сообщений: 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. Интересуют исходники? Предложили и пропали  Жаль... Спрошу по другому, если я многих Гуру здесь напугала с написанием тестовой - учебной прграммы: Из перечисленных требований к программе хочется понять как работать: 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
|
|
|
|
|
Oct 13 2012, 19:49
|
Гуру
     
Группа: Свой
Сообщений: 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)... а что именно не понятно?
|
|
|
|
|
Oct 13 2012, 21:08
|

Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Oct 15 2012, 08:00
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Alla_student @ Oct 13 2012, 16:41)  Вы продолжаете не внимательно читать мои ответы, видимо я здесь (в этой теме) совсем не нужна. Повторно: Напишите или точнее приведите свой код для сравнеия без этих 80 прцентов. Так было бы намного понятнее и по теме топика, который я открыла. А так вы только оправдыветесь или как еще это назвать  Запросы у вас однако  Такое впечатление, что все долджны бросить свои дела и начать строчить вам код Могу поделится готовым - Общение с 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; Сильно помогло? Цитата Я уже смотрю в сторону C# и хотела сравнить величину кода, разницу в подходах к написанию программ на C# и MFC, работу с формами. Для MFC нет дезайнера форм (максимум редактор диалогов). В C# он есть, на и вообще - C# полноценный RAD тул, а MFC таковым не является Цитата На вопрос можно ли сделать так, чтобы программа на C# "носила все всегда с собой", распологалось в одной программной директории, а не ругалось того иили другого нет в системе, установите то то, мне то же никто не ответил. C# требует .NET runtime. Вы можете включить соответствующий пакет в дистрибутив, но ставится он в любом случае будет в систему. Кроме того, в последних Windows уже стоят разные версии .NET (хотя могут быть и не самые свежие) Цитата Если 10 тысяч строк кода, то на MFC писать не очень сложное приложение, которое я описала в первом сообщение, это не для меня. И я видела текст более сложных приложений на MFC, там нет 10 000 строк, что то вы здесь лукавите или ошибаетесь. Ну может на 10000, но 1000 будет точно Цитата А она кем то поддерживается или отдана в свободное плавание? Не устраивает мое начальство библиотеки "без хозяевЭю Библиотека под GPL, хозяин (на сегодня) - Nokia. Развивается и поддерживается очень серьезно. На сегодняшний день это пожалуй библиотека №1 среди кросс платформенных решений. Цитата Непонятна ваша реакция с учетом не внимательного чтения моих сообщений, извините, но это больше смахивает на демагогию. Я очень внимательно читал все ваши сообщения, но так и не смог до вас донести, что писать с нуля примеры, которые вы хотите, вам никто не будет - слишком они объемные.
|
|
|
|
|
Oct 15 2012, 10:03
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146

|
Цитата(XVR @ Oct 15 2012, 11:00)  Запросы у вас однако  Такое впечатление, что все долджны бросить свои дела и начать строчить вам код Могу поделится готовым - Я указывала, что по желанию и в свободное время (привести номер моего сообщения здесь или сами увидите?), а говорите, что внимательно читаете  Цитата Работа с 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; Сильно помогло?  Похоже на издевку  Я написала - код всего приложения, а не одной функции вывода, которую прекрасно знаю. Опять не внимательно читали. Тем более, если для 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
|
|
|
|
|
Oct 15 2012, 10:46
|
Участник

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

|
Насчет SECURITY_ATTRIBUTES  )) 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  ) 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=89854http://rutracker.org/forum/viewtopic.php?t=991026http://c2p.ru/cpp/a-meshkov-yu-tixomirov-visual-c-i-mfc.htmlни чего в MFC сложного нет  )) да ... кода будет много ... C# намного проще да и систем без FrameWorkа давно уже нет  ))) он везде нужен  )) вот готовое CSerialPort v1.27 An MFC class for Win32 serial ports http://www.naughter.com/serialport.htmlSerial library for C++ http://www.codeproject.com/Articles/992/Serial-library-for-CCSerialCom - A Simple Class for Implementing Serial Communication in Win-9X/2000 http://www.codeproject.com/Articles/2973/C...ementing-SerialDynamic LED Control http://www.codeproject.com/Articles/2654/Dynamic-LED-ControlStatic LED Control http://www.codeguru.com/cpp/controls/contr...LED-Control.htmAn MFC Chart Control with Enhanced User Interface http://www.codeproject.com/Articles/317712...-User-InterfaceVCTERM http://msdn.microsoft.com/en-us/library/ms...v=vs.71%29.aspxhttp://melfarihi.free.fr/mfc/general/vcterm/A communication class for serial port http://www.codeguru.com/cpp/i-n/network/se...serial-port.htmMFC class for serial communication http://www.codeforge.com/article/490Sending Commands in Visual C++ ( With MFC ) to ADR Interfaces http://ontrak.net/mfc.htm
Сообщение отредактировал fox1 - Oct 15 2012, 13:14
|
|
|
|
|
Oct 16 2012, 10:47
|
Гуру
     
Группа: Свой
Сообщений: 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  ) Вам да, а вот ТС нет. Я не говорю, что Overlapped IO вообще не нужен - просто он не нужен в задаче ТС Цитата По поводу дизайнера форм - все там есть (можно конечно это назвать это дизайнером диалогов, сути не меняет), под MFC вы можете создать SDI, MDI и Dialog Based приложение. Залез в VS2010, создал приложение MFC. Дизайнера форм (в понимании RAD системы) не нашел - банальный редактор диалогов. Но есть развитые визарды, которые автоматически создают все необходимые классы и переменные для всех контролов диалога. С ActiveX работать умеет. Так что для создания приложения для ТС подойдет. Цитата ни чего в MFC сложного нет  )) С этим никто не спорит Цитата да ... кода будет много ... C# намного проще В этом и суть - MFC отмирает в пользу .NET причем с рекордной скоростью. Изучать его сейчас с нуля смысла нет - можно не успеть применить на практике полученные знания
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|