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

 
 
> Прошу помощи в написании простой тестовой программы, Пошаговое обучение программированию в VS2010
Alla_student
сообщение Oct 12 2012, 00:10
Сообщение #1


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

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



Здравствуйте!

Хочу сразу признаться - опыта не было в написании программ на VS (C++). Есть опыт в написании на C. Но по долгу службы приходится обучаться этому ремеслу. Летом в небольшие промежутки свободного времени проштудировала книжки предложенные здесь для прочтения - в голове сумбур. Для наведения порядка ... в моей голове и реального обучению, лучше начинать писать небольшую программу. Так, как рядом (на работе) спецов нет, хочу попросить вас, уважаемые форумчане, помочь в написании программы - примера. Я не прошу написать всю программу (хотя полный текст ее был более удобен для изучения и повторения), а хотя бы части, функциональные блоки программы. Мне будет удобно, изучая эти блоки, понять приемы визуального программирования и соответсвенно написать свою. Теперь к требованиям этой тестовой - учебной программе:
Программа или блоки программы дложны быть написаны нв Visual Studio желательно более старшей версии - 2010 (но не старше). Можно и в предыдущих вплоть до VC6.0. Гланое условие - без использования NET. После запуска программы, она должна работать (открыть порт COM1 со стандартной установкой: старт; 8бит; стоп скорость 9600 бод, если будет предварительный выбор порта с установкой параметров- то еще лучше) и принимать три байта: 1й байт всегда стартовая метка CA, второй - B1 отображается на панели светодиодов сменой картики светодиод зажен или нет, третий B2 отображается на графике ось ординат от 0 до 255. Ось абцисс - номер пакета от 0 до 255, при превышении номера пакета 255 - опять с нуля и стирается старый график. Программа так же должна уметь передавать по COM порту данные при нажатии кнопки send - два байта: первый - стартовый CA, второй - байт данных устанавливатся битовым полем Checkbox. При запуске программы должна открыться база SQL и внее должны записываться принимаемые данные соответственно по полям: N - номер пакета (long?), B1 байт данных (char), второй байт данных B2 (char). При выходе из программы база закрывается.
Из всего выше перечисленного хочется понять как работать:
1) Работа с COM портом. Прием и передача простых 2-х и 3-х байтовых пакетов.
2) Работа с базой данных SQL инициализация, открытие, запись (желательно чтение) полей, закрытие. Возможно что то я не учла.
3) Вывод форматированных данных в окно большим шрифтом (что то типа индикатора, дисплея).
4) Вывод бинарных данных в поле имитирующее светодиоды.
5) Опрос поля Checkbox (хотелось конечно, чтобы было поле выключателей OFF/ON).
6) Работа с Plot функцикей - вывод графика.
Дополнительно - этого нет выше:
7) Вывод принятых данных в виде лога (в скролинговое окно - забыла как оно точно называется) и в тектовый файл, который то же надо открыть или создать, если его нет, ну и закрыть после работы с ним.

Прошу, кто имеет немного свободного времени, помочь в написании этих блоков программы, желательно с небольшими комментариями. Пускай не сразу все, а по кусочкам.. Я думаю это многим поможет, не только мне, в написании своих первых программ на VS, да и не только.
Заранее Спасибо!
Далее в виде изображения требования к программе:

Сообщение отредактировал Alla_student - Oct 12 2012, 00:22
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 38)
fox1
сообщение Oct 12 2012, 05:17
Сообщение #2


Участник
*

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



Ну уж если так хочется на Visual C++ (на C# намного проще все)

Допустим класс CModem
Код
CModem::CModem()
{
    m_hComm = INVALID_HANDLE_VALUE;
}

CModem::~CModem()
{
    UnInitialize();
}

BOOL CModem::Initialize(LPCTSTR lpCommPort)
{
    SECURITY_ATTRIBUTES sa;

    SECURITY_DESCRIPTOR sd;  

//--------------------------------------------------------------------

  if (IsWinNT())        // инициализация security для Windows NT
  {
    InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(&sd, true, NULL, false);
    sa.lpSecurityDescriptor = &sd;
  }

  else sa.lpSecurityDescriptor = NULL;

  sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  sa.bInheritHandle = true;       // разрешаем наследование дескрипторов

//--------------------------------------------------------------------

    m_hComm = CreateFile(lpCommPort,
        GENERIC_READ | GENERIC_WRITE, 0, &sa,
        OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

    if (m_hComm == INVALID_HANDLE_VALUE)
    {
        
        CString strIntErrModem;
        
        strIntErrModem.Format(
            _T("%s %s"),
            _T("Ошибка при создании указателя на "),
            lpCommPort);

        AfxMessageBox(strIntErrModem.GetBuffer(strIntErrModem.GetLength()),
            MB_OK | MB_ICONERROR );

        return FALSE; // fail to create

    }


    DCB dcb;

    GetCommState(m_hComm, &dcb);
    
    //BuildCommDCB(_T("baud=9600 parity=N data=8 stop=1"), &dcb);

    //BuildCommDCB("baud=19200 parity=N data=8 stop=1", &dcb);

    BuildCommDCB(
        _T("baud=1200 parity=N data=8 stop=1"),
        &dcb);

    dcb.fNull = false;

    SetCommState(m_hComm, &dcb);

    SetCommMask(m_hComm, EV_BREAK | EV_RXCHAR);

    EscapeCommFunction(m_hComm, CLRBREAK);

    //EscapeCommFunction(m_hComm, CLRDTR);

    PurgeComm(m_hComm, PURGE_TXABORT & PURGE_RXABORT);    

    return TRUE;
}

void CModem::UnInitialize()
{
    if (m_hComm != INVALID_HANDLE_VALUE)
    {
        EscapeCommFunction(m_hComm, CLRBREAK);//SETBREAK

        CloseHandle(m_hComm);

        m_hComm = INVALID_HANDLE_VALUE;
    }
}

BOOL CModem::IsWinNT()  //проверка запуска под WIN NT
{

    OSVERSIONINFO osv;

    osv.dwOSVersionInfoSize = sizeof(osv);

    GetVersionEx(&osv);

    return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);

}


кольцевой буфер для приема-передачи байт CBuffer

Код
Buffer::CBuffer(int nLength, int nExtra)
{
    m_Length = nLength;

    m_Extra = nExtra;

    m_Head = m_Tail = 0;

    m_pBuffer = new CHAR[m_Length];
    
    if (IsWinNT())        // инициализация security для Windows NT
    {
    InitializeSecurityDescriptor(&sdBuffer,SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(&sdBuffer, true, NULL, false);
    saBuffer.lpSecurityDescriptor = &sdBuffer;
    }
    else saBuffer.lpSecurityDescriptor = NULL;

    saBuffer.nLength = sizeof(SECURITY_ATTRIBUTES);
    saBuffer.bInheritHandle = true;       //разрешаем наследование дескрипторов
      
    m_NotEmpty = new CEvent(FALSE, FALSE, NULL, &saBuffer);
    // объект "событие" изначально находится в состоянии "сброшен"                
    // объект "событие" с автоматическим сбрасыванием
}

CBuffer::~CBuffer()
{
    delete m_pBuffer;
}

BOOL CBuffer::ReadChar(CHAR& cChar)
{
    CSingleLock Lock(&m_Lock, TRUE);

    if (m_Tail == m_Head) return FALSE;

    cChar = m_pBuffer[m_Tail++];

    m_Tail %= m_Length;

    Lock.Unlock();

    return TRUE;
}

void CBuffer::WriteChar(CHAR cChar)
{

  CSingleLock Lock(&m_Lock, TRUE);

  m_pBuffer[m_Head++] = cChar;
  m_Head %= m_Length;

  // При необходимости размер буфера может быть увеличен

  if (m_Head == m_Tail)
  {

    CHAR *pBuffer = new CHAR[m_Length+m_Extra];

    memcpy(pBuffer, m_pBuffer, sizeof(CHAR) * m_Head);

    memcpy(pBuffer+m_Tail+m_Extra, m_pBuffer+m_Tail,
        sizeof(CHAR) * (m_Length-m_Tail));

    m_Length += m_Extra;

    m_Tail += m_Extra;

    delete m_pBuffer;

    m_pBuffer = pBuffer;
  }

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

    Lock.Unlock();

    m_NotEmpty->SetEvent();
}

BOOL CBuffer::IsWinNT()  // проверка запуска под WIN NT
{
    OSVERSIONINFO osv;

    osv.dwOSVersionInfoSize = sizeof(osv);

    GetVersionEx(&osv);

    return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);

}


Создаем три потока

CWinThread *m_pOutThreadPort; // поток записи в последовательный порт
CWinThread *m_pInThreadPort; // поток чтения из последовательного порта
CWinThread *m_pDrawThreadPorе; // поток обработки принятых данных

ловим байты в потоке

Код
DWORD InDataPort1(LPVOID lParam)
{
...

for (;;)
    {
        ResetEvent(o1.hEvent);

        if (!WaitCommEvent(pWnd->m_Port1.m_hComm, &dwEvtMask1, &o1))
        {
            if (WaitForMultipleObjects(2, Handles1, FALSE, INFINITE) ==
                WAIT_OBJECT_0+1) break;
        }

....

if (dwEvtMask1 & EV_RXCHAR)
        {        

            ClearCommError(pWnd->m_Port1.m_hComm, &dwError1, &csStat1);

            ResetEvent(o1.hEvent);

            if (!ReadFile(pWnd->m_Port1.m_hComm, szBuffer1,
                csStat1.cbInQue, &dwBytes1, &o1))
            {
                if (WaitForMultipleObjects(2, Handles1, FALSE, INFINITE) ==
                    WAIT_OBJECT_0+1)
                    break;
            }


        
            for (UINT i1 = 0; i1 < csStat1.cbInQue; i1++)            
                pWnd->m_Port1.m_InBuffer.WriteChar(szBuffer1[i1]);            


            //Sleep(1);

        }


и так далее

в качестве графика рекомендую ZedGraph
если в устройстве присутствует MODBUS- так сразу NMODBUS

так же почитать
http://rln.nnov.ru/index.php?ind=reviews&a...iew&iden=44

на MSDN

http://msdn.microsoft.com/en-us/library/ff802693.aspx





Сообщение отредактировал fox1 - Oct 12 2012, 05:39
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 12 2012, 09:18
Сообщение #3


Гуру
******

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



Жуть.
Пляски с SecurityDescriptor не нужны - вы же не собираетесь ваши открытые порты и созданные события отдавать на сторону. Дублировать IsWinNT() в каждом классе нет никакой необходимости. Чтение из порта видимо запущенно в отдельном потоке. В таком случае Overlapped чтение вообще не нужно - пусть блокирует поток.
Кольцевой буфер лучше сделать на std::deque<char>, а не заниматься изобретением велосипедов.

К ТС - по поводу VS и NET. Если вам нужен GUI и не нужен .NET, то имеет смысл посмотреть в какую нибудь другую сторону - весь майнстрим у VS по поводу GUI направлен на .NET, все остальное умерло (у них). Либо смотрите в сторону Qt, либо какого нибудь Builder'а

Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 12 2012, 10:44
Сообщение #4


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

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



Цитата(XVR @ Oct 12 2012, 12:18) *
Жуть.
Пляски с SecurityDescriptor не нужны - вы же не собираетесь ваши открытые порты и созданные события отдавать на сторону. Дублировать IsWinNT() в каждом классе нет никакой необходимости. Чтение из порта видимо запущенно в отдельном потоке. В таком случае Overlapped чтение вообще не нужно - пусть блокирует поток.
Кольцевой буфер лучше сделать на std::deque<char>, а не заниматься изобретением велосипедов.

А вы бы не могли тогда пожалуйста прмеры привести, а то так меня совсем запутали sad.gif

Цитата
К ТС - по поводу VS и NET. Если вам нужен GUI и не нужен .NET, то имеет смысл посмотреть в какую нибудь другую сторону - весь майнстрим у VS по поводу GUI направлен на .NET, все остальное умерло (у них). Либо смотрите в сторону Qt, либо какого нибудь Builder'а


Я понимаю вас, что надо сменить компилятор и перейти на Builder или Qt. Но в то же время я вижу, что пишут программы под VS2010 с окнами и всеми фитчами описанными мной в топике без использования NET. Вопрос - как они это делают? Используют VS6.0 а потом проект переводят под VS2010? Используют MFC и не используют формы VS2010 (если вы говорите, что сразу это потянет "весь майнстрим у VS по поводу GUI направлен на .NET"?

Может все таки есть способ при написании программы с NET, этот весь весь майнстрим делать в виде библиотек dll-ок и вся эта "парадигма современного Microsoft" жила в одном каталоге с программой?

Цитата(fox1 @ Oct 12 2012, 09:17) *
Ну уж если так хочется на Visual C++ (на C# намного проще все)
...

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

Сообщение отредактировал Alla_student - Oct 12 2012, 10:51
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
fox1
сообщение Oct 12 2012, 11:22
Сообщение #5


Участник
*

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



SecurityDescriptor обязателен начиная с Windows XP.
Насчет дублирования IsWinNT() в каждом классе - вопрос спорный, можно конечно отдельную процедуру завести и глобальные флаги, но считаю это дело вкуса.
При использовании контейнера std::deque<char> надо синхронизировать доступ к этому контейнеру из потоков - проще свой завести, буфер стандартный, ни каких велосипедов.
На Builder переходить ... тоже вопрос спорный, многозадачность в нем своеобразная.
Последнии версии VS очень сильно ориентированы на FrameWork, но и MFC ни кто не отменял.

Синхронный и асинхронный ввод - вывод (I/O)
http://www.vsokovikov.narod.ru/New_MSDN_AP...asynchro_io.htm

Сообщение отредактировал fox1 - Oct 12 2012, 11:31
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 12 2012, 11:30
Сообщение #6


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

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



Цитата(fox1 @ Oct 12 2012, 14:22) *
SecurityDescriptor обязателен начиная с Windows XP.
Насчет дублирования IsWinNT() в каждом классе - вопрос спорный, можно конечно отдельную процедуру завести и глобальные флаги, но считаю это дело вкуса.
При использовании контейнера std::deque<char> надо синхронизировать доступ к этому контейнеру из потоков - проще свой завести, буфер стандартный, ни каких велосипедов.
На Builder переходить ... тоже вопрос спорный, многозадачность в нем своеобразная.
Последнии версии VS очень сильно ориентированы на FrameWork, но и MFC ни кто не отменял.


Еще раз спасибо. Хотелось конечно чтобы здесь без "войн" - надо делать так, нет не так, а то у меня и без этого "крыша едет".
Я понимаю разницу в программировании C++ без NET и C# , я прошу вас, если можно, привести два (желательно подробных) примера простых программ (полностью текст) открытия основного окна и в нем вывод в дополнительное окно значения переменной short или long как на рисунке в предыдущем моем сообщении.
Go to the top of the page
 
+Quote Post
fox1
сообщение Oct 12 2012, 11:41
Сообщение #7


Участник
*

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



Ок sm.gif))

Начните с создания приложения Visual С++ MFC на основе диалога

http://msdn.microsoft.com/ru-ru/library/9e...v=vs.90%29.aspx

с использованием ActiveX

можно использовать activex serialport control и не заморачиваться
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 12 2012, 11:58
Сообщение #8


Гуру
******

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



Цитата(fox1 @ Oct 12 2012, 15:22) *
SecurityDescriptor обязателен начиная с Windows XP.
С чего бы это вдруг?
MSDN - CreateFile, описание параметра lpSecurityAttributes :
Цитата
lpSecurityAttributes [in, optional]

A pointer to a SECURITY_ATTRIBUTES structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether the returned handle can be inherited by child processes.

This parameter can be NULL.

If this parameter is NULL, the handle returned by CreateFile cannot be inherited by any child processes the application may create and the file or device associated with the returned handle gets a default security descriptor.


Цитата
Насчет дублирования IsWinNT() в каждом классе - вопрос спорный, можно конечно отдельную процедуру завести и глобальные флаги, но считаю это дело вкуса.
Это не 'дело вкуса'. У вас N штук совершенно идентичных куска кода, которые к тому же совершенно не имеют отношения к тем классам, где они объявлены (в частности это видно по тому, что они не используют никаких членов классов, где они объявлены).
Нужно было просто сделать обычную процедуру (не в классе). Если С++ ООП язык, это еще не значит, что в ОО программах нельзя использовать обычные функции

Цитата
При использовании контейнера std::deque<char> надо синхронизировать доступ к этому контейнеру из потоков - проще свой завести, буфер стандартный, ни каких велосипедов.
Да ну? Давайте сравним:
Код
void CBuffer::WriteChar(CHAR cChar)
{

  CSingleLock Lock(&m_Lock, TRUE);

  m_pBuffer.push_back(cChar);

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

    Lock.Unlock();

    m_NotEmpty->SetEvent();
}
Несколько короче, не правда ли?

Цитата
На Builder переходить ... тоже вопрос спорный, многозадачность в нем своеобразная.
Обычная, как везде в Windows. Но сам Bulder действительно вещь своеобразная (особенно последние версии) cranky.gif

Цитата
Последнии версии VS очень сильно ориентированы на FrameWork, но и MFC ни кто не отменял.
Это да, но изучать с нуля умершую архитектуру я бы ТС не посоветовал rolleyes.gif

Цитата
Синхронный и асинхронный ввод - вывод (I/O)

Угу, только асинхронный тут не нужен biggrin.gif

Цитата
я прошу вас, если можно, привести два (желательно подробных) примера простых программ (полностью текст) открытия основного окна и в нем вывод в дополнительное окно значения переменной short или long как на рисунке в предыдущем моем сообщении.
Если в вас будет Builder или Qt или WindowsForm с С#, то это пара строк. На MFC это займет пару сотен строк. На голом WinAPI - пару тысяч. Вам на чем примеры приводить? rolleyes.gif
Go to the top of the page
 
+Quote Post
fox1
сообщение Oct 12 2012, 12:29
Сообщение #9


Участник
*

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



SecurityDescriptor обязателен начиная с Windows XP и Windows NT.
Попробуйте в XP SecurityDescriptor = NULL sm.gif))) и работать перестанет.
Это код программы для связи с приборами я давно уже писал, начинал еще с Win98 - так в NT уже не работало пока не проинициализировал
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
не зря там введен анализ на ОСЬ sm.gif)))
можете проверить sm.gif))
в MSDN явно про это ни где не говориться sm.gif)))

вот хороший примет MTTY

http://read.pudn.com/downloads8/sourcecode...1/MTTTY.C__.htm

Сообщение отредактировал fox1 - Oct 12 2012, 12:46
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 12 2012, 13:00
Сообщение #10


Местный
***

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



Цитата(fox1 @ Oct 12 2012, 16:29) *
Это код программы для связи с приборами я давно уже писал, начинал еще с Win98 - так в NT уже не работало пока не проинициализировал
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
не зря там введен анализ на ОСЬ sm.gif)))
можете проверить sm.gif))

Вы что-то путаете, нижепреведённый код прекрасно работает под XP (и под 7-ой будет работать), у Вас из-за чего другого не работало wink.gif
CODE
//
hCommPort = CreateFile(
"COM1"
, GENERIC_READ | GENERIC_WRITE
, 0
, 0
, OPEN_EXISTING
, 0
, 0
);
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 12 2012, 13:15
Сообщение #11


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

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



Цитата(XVR @ Oct 12 2012, 14:58) *
...
Угу, только асинхронный тут не нужен biggrin.gif

Вообще то мы испльзуем асинхронный обмен по RS232!

Как автор топика, я хочу сделать вам замечание - я просила привести примеры, а не продолжать с апонентом кидаться "заплатками" кода, сложного для моего понимания.

Цитата
Если в вас будет Builder или Qt или WindowsForm с С#, то это пара строк. На MFC это займет пару сотен строк. На голом WinAPI - пару тысяч. Вам на чем примеры приводить? rolleyes.gif


Я бы попросила вас здесь не умничить на счет WinAPI, а привести примеры для C# и MFC - я об этом так выше и писала, если вы читаете внимательно весь топик. Если пару сотен строкдля вас сложно привести, а я думаю есть у вас какие нибудь наработки, а не все с нуля, то не приводите здесь - я писала выше, если вам не сложно и есть время.

По поводу QT и Bulder - не могу я их испльзовать, раньше об этом сообщала.

Цитата(RabidRabbit @ Oct 12 2012, 16:00) *
Вы что-то путаете, нижепреведённый код прекрасно работает под XP (и под 7-ой будет работать), у Вас из-за чего другого не работало wink.gif
...


Ко всем: Вы продолжаете извините мериться ... , а на мои ключевые вопросы не отвечаете, сожалею, но надеюсь wink.gif

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


Гуру
******

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



Цитата(RabidRabbit @ Oct 12 2012, 16:00) *
Вы что-то путаете, нижепреведённый код прекрасно работает под XP (и под 7-ой будет работать), у Вас из-за чего другого не работало wink.gif

Тоже так думаю - путает.
Под XP и 9x подключался так:
Код
PortHandle:=CreateFile(PChar(p_sring), GENERIC_READ  or  GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 12 2012, 16:12
Сообщение #13


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

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



Вот так выглядела моя программа, написанная по похожему как у Вас ТЗ. Только без базы.
MFC.
Интересуют исходники?
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 12 2012, 21:39
Сообщение #14


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

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



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

Да, конечно, вы еще спрашиваете wink.gif

Но я вас помучаю после wink.gif В хорошем смысле
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 13 2012, 09:18
Сообщение #15


Гуру
******

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



Цитата(Alla_student @ Oct 12 2012, 17:15) *
Вообще то мы испльзуем асинхронный обмен по RS232!
Это никоим образом не мешает использовать синхронные вызовы ReadFile и WriteFile для ассинхронного обмена по RS232

Цитата
Как автор топика, я хочу сделать вам замечание - я просила привести примеры, а не продолжать с апонентом кидаться "заплатками" кода, сложного для моего понимания.
Вам fox1 привел пример, правда он процентов на 80% избыточен и переусложнен, о чем я и написал

Цитата
Я бы попросила вас здесь не умничить на счет WinAPI, а привести примеры для C# и MFC - я об этом так выше и писала, если вы читаете внимательно весь топик.
C# - это .NET, а он вас не устраивает, как вы сами писали. На MFC попросите fox1 - он похоже на нем писал (я не писал, и не собираюсь)

Цитата
Если пару сотен строкдля вас сложно привести, а я думаю есть у вас какие нибудь наработки, а не все с нуля, то не приводите здесь - я писала выше, если вам не сложно и есть время.
Ваша задача - это не 'пара сотен срок кода', а где то ближе к десятку тысяч. GUI часть очень сильно зависит от библиотеки, о чем я вам и написал

Цитата
По поводу QT и Bulder - не могу я их испльзовать, раньше об этом сообщала.
Qt - это библиотека, в том числе и под VS (в том числе и 2010), так что не вижу препядствий в ее использовании

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

Вы задали слишком общий вопрос - на него невозможно ответить. Конкретизируйте вопрос - получите ответ
Go to the top of the page
 
+Quote Post
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
SyncLair
сообщение Oct 20 2012, 15:50
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(XVR @ Oct 12 2012, 13:18) *
К ТС - по поводу VS и NET. Если вам нужен GUI и не нужен .NET, то имеет смысл посмотреть в какую нибудь другую сторону - весь майнстрим у VS по поводу GUI направлен на .NET, все остальное умерло (у них). Либо смотрите в сторону Qt, либо какого нибудь Builder'а

Поддерживаю совет этого мудреца )! Qt -- имеет средства визуального программирования QtCreator и код выглядит чуть лучше. Бонусом идёт кросплаформенность. Всё официально бесплатно. Документация и примеры Qt очень информативны.


Цитата(Alla_student @ Oct 20 2012, 16:33) *
Вопрос по QT -> QT c официального сайта Nokia скачивается как еволюшин 30 дней, можно его как то подлечить на предмет продления жизненного цикла?


Зачем скачивать эволюшн когда можно скачать qtsdk без каких либо ограничений!!!

Забудьте Visual studio используйте qt creator!

Для работы с портом используйте qextserialport. Хотя можно и функции вин апи если хотите)


Сообщение отредактировал SyncLair - Oct 20 2012, 15:59


--------------------
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 20 2012, 16:15
Сообщение #32


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

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



Цитата(SyncLair @ Oct 20 2012, 19:50) *
Поддерживаю совет этого мудреца )! Qt -- имеет средства визуального программирования QtCreator и код выглядит чуть лучше. Бонусом идёт кросплаформенность. Всё официально бесплатно. Документация и примеры Qt очень информативны.
Зачем скачивать эволюшн когда можно скачать qtsdk без каких либо ограничений!!!
Забудьте Visual studio используйте qt creator!
Для работы с портом используйте qextserialport. Хотя можно и функции вин апи если хотите)

Вы видимо не читали весь тред, я еще раз конкретно для вас говорю - надо работать под VS2010 и это не мое требование!

2ALL: Пробежалась по инету - Qt Commerce для VS2010 существует только в онлайн докачке при инсталяции и поэтому его сложно вылечить, возможно я не права.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Oct 20 2012, 16:42
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(Alla_student @ Oct 20 2012, 20:15) *
Вы видимо не читали весь тред, я еще раз конкретно для вас говорю - надо работать под VS2010 и это не мое требование!

2ALL: Пробежалась по инету - Qt Commerce для VS2010 существует только в онлайн докачке при инсталяции и поэтому его сложно вылечить, возможно я не права.

Работайте под QtCreator а программу перед сдачей скомпилирйте в 30 дневной версии под VS2010 если Вас об этом просит начальник. Также есть такой путь CMAKE+QT-> проект для Visual Studio.

Забудьте вы MFC как страшный сон! И научитесь отличать компилятор студию разработки и библиотеки. Вам как студенту надо знать отличия, это три разные вещи.


--------------------
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 20 2012, 18:31
Сообщение #34


Местный
***

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



Зачем сразу CMAKE, когда QT'шный qmake замечательно генерит проекты под VS sm.gif
QT под LGPL http://qt-project.org/downloads - качайте на здоровье sm.gif
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Oct 20 2012, 18:51
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(RabidRabbit @ Oct 20 2012, 22:31) *
Зачем сразу CMAKE, когда QT'шный qmake замечательно генерит проекты под VS sm.gif
QT под LGPL http://qt-project.org/downloads - качайте на здоровье sm.gif

Извините я фанат СМАКЕ-а как в той поговорке про, то что у кого есть молоток тот везде видит гвозди biggrin.gif даже КДЕ-шники его признали заместо Кумаке-а


--------------------
Go to the top of the page
 
+Quote Post
Alla_student
сообщение Oct 21 2012, 14:27
Сообщение #36


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

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



Цитата(RabidRabbit @ Oct 20 2012, 21:31) *
Зачем сразу CMAKE, когда QT'шный qmake замечательно генерит проекты под VS sm.gif
QT под LGPL http://qt-project.org/downloads - качайте на здоровье sm.gif


Как его (Qt) правильно поставить под VS2010? Можно ли, использовать от коммерческой версии Qt Integration for MS Visual Studio?

Цитата(SyncLair @ Oct 20 2012, 21:51) *
Извините я фанат СМАКЕ-а как в той поговорке про, то что у кого есть молоток тот везде видит гвозди biggrin.gif даже КДЕ-шники его признали заместо Кумаке-а


Хорошо, а как будут жить с Qt инструментальные компонеты NET или ActiveX для VS типа UV шкала (стрелочный прибор) LED индикатор и т.д. по ссылке http://www.globalmajic.com/c162/Net-Instru...ntrols-c11.html

Или что то есть подобное для Qt?
Go to the top of the page
 
+Quote Post
Владимир Иванов
сообщение Oct 21 2012, 15:34
Сообщение #37





Группа: Новичок
Сообщений: 2
Регистрация: 21-10-12
Из: Киев
Пользователь №: 74 024



очень интересно rolleyes.gif
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Oct 21 2012, 15:54
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Цитата(Alla_student @ Oct 21 2012, 17:27) *
Как его (Qt) правильно поставить под VS2010? Можно ли, использовать от коммерческой версии Qt Integration for MS Visual Studio?



Хорошо, а как будут жить с Qt инструментальные компонеты NET или ActiveX для VS типа UV шкала (стрелочный прибор) LED индикатор и т.д. по ссылке http://www.globalmajic.com/c162/Net-Instru...ntrols-c11.html

Или что то есть подобное для Qt?

Есть http://qt-apps.org/content/show.php/Analog...s?content=87780
Используйте mingw-gcc компилятор и QtCreator IDE (всё в комплекте с QtSdk), а всю это одноплатформенную пропритарную каку (VS, .NET и пр. мелкий софт) забудьте. Не место этим технологиям в современном мире, а если начальник требует чтобы программа была собрана в MSVS, то пусть мотивирует это в ответ на Вашу технически грамотную мотивацию против.
Скачивать фриварную версию тут http://qt-project.org/downloads никаких 30 дней. Ограничения лицензии: нельзя линковать статически. Т.е. для распространения программы понадобится набор dll из комплекта, и хоть код dll открыт их нельзя скомпилить и слинковать в 1 бинарник. Остальные ограничения пока Вас не коснутся. И вот только если есть веские причины по которым вся программа должна быть в одном исполняемом файле без Qt-шных dll, то тогда да, стоит купить коммерческую версию.
По остальным требованиям поглядел - работа с SQL есть, до скриптовых языков с веб-фреймворками далеко по удобству, но всё же MVC и куча поддерживаемых драйверов и БД. Последовательный порт - в комплекте нет, но есть, например qextserialport в пол-пинка прикручивается и работает кроссплатформенно.

Сообщение отредактировал Cosmojam - Oct 21 2012, 16:11


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
яман-тау
сообщение Oct 21 2012, 16:20
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 662
Регистрация: 15-02-09
Из: Магнитогорск
Пользователь №: 44 875



Может здесь что нибудь найдете
Go to the top of the page
 
+Quote Post

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

 


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


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