Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
1

Переработка консольного приложения в оконное

02.12.2015, 14:32. Просмотров 905. Ответов 26
Метки нет (Все метки)

Пишу на с++.
Хочу консольное приложение(многофайловое , модульное) в оконное "трансформировать".
Начал писать на Windows Forms, но столкнулся с трудностями:
1) в некоторых кусках кода нужна скорость (решено костылями)
2) приложение крашиться по непонятным причинам и это не радует
Помочь с этим никто не может, поэтому ищу "железный"(безошибочный) вариант для написания оконного приложения!!!

QT не возлюбило статическую библиотеку *lib (есть вариант, что я мб не так подключаю)
Есть еще варианты написания оконных приложений?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2015, 14:32
Ответы с готовыми решениями:

Реализовать оконное приложение из консольного
Здравствуйте, у меня проблема с программой. Сделать в командной строке получилось, а вот такое же в...

Как отличается оконное от консольного программирования?
Насколько знаю, есть borland c++ builder с графическим редактором. Возник вопрос, как отличается...

Трансляция консольного проекта под оконное
Здравствуйте, уважаемые знатоки :) Я сверх-новый ученик языка c++ вот... и многие моменты мне еще...

Проект консольного приложения из Windows приложения
привет всем. В чем может быть ошибка? 1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на...

Отладка консольного приложения
в отладчике OllyDbg открыл оконный проект из Делфи, вся информация, код отображаются нормально....

26
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
02.12.2015, 15:49 2
Ну есть вариант с WinAPI. Сложный. Лучше допиливай с Qt. Какая там проблема с библиотекой?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
02.12.2015, 16:54  [ТС] 3
nmcf,
Есть драйвер WinIO. Он состоит из файла lib(+файл sys) и заголовочного файла
Почему-то ругается на заголовочный файл ..может я не так библиотеку подключаю?
Я взял и просто нажал добавить файлы и подключил заголовочный файл к проекту...

В студии все нормально компилируется, тут лаит...хотел qt с компилятором от студии, там вообще сборка не запусилась..тоже непонятно из-за чего..в общем вот так вот
0
rangerx
1954 / 1563 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
02.12.2015, 17:16 4
Цитата Сообщение от Oryel Посмотреть сообщение
Есть еще варианты написания оконных приложений?
wxWidgets
0
02.12.2015, 17:16
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
02.12.2015, 17:22 5
Qt Creator? В Headers? А что за ошибка?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
03.12.2015, 13:58  [ТС] 6
Вот код Winio.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef WINIO_H
#define WINIO_H
 
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
 
extern "C"
{
   WINIO_API _declspec bool _stdcall InitializeWinIo();
 WINIO_API _declspec void _stdcall ShutdownWinIo();
 WINIO_API _declspec PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API _declspec bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API _declspec bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API _declspecbool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
 WINIO_API  bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API  bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API  bool _stdcall RemoveWinIoDriver();
}
 
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
 
bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();
 
#endif


Ругается на все!!! вот, для примера пару ошибок

C++
1
2
3
4
5
6
7
D:\Soft\qtexa\Test2\winio.h:14: ошибка: 'PBYTE' does not name a type
   PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
   ^
 
D:\Soft\qtexa\Test2\winio.h:20: ошибка: expected primary-expression before 'bool'
    bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
                                                              ^
0
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
03.12.2015, 14:19 7
Это типы WinAPI, обычно подключают Windows.h для них. У тебя он есть?

Добавлено через 4 минуты
Вообще-то он так выглядит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef WINIO_H
#define WINIO_H
 
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
 
extern "C"
{
  WINIO_API bool _stdcall InitializeWinIo();
  WINIO_API void _stdcall ShutdownWinIo();
  WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API bool _stdcall RemoveWinIoDriver();
}
 
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
 
bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();
 
#endif
Откуда лишние _declspec?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
03.12.2015, 16:27  [ТС] 8
nmcf,

Это его родной заголовок... в студии к нему нареканий нет

Вот пробую запасной план
их два...первый не использовать lib, а dll ..тут тоже проблема появилась, но забыл какая...

второй ...у меня почему -то в с++ builder при подключении conio.h
Не определяет функции в ней прописанные , типа _outp

в чем дело? их надо как-то по особому подключать? или?
я просто инклюд загоовочный и все...
0
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
03.12.2015, 16:39 9
Так у тебя ещё и Builder? Мы вроде бы про Qt говорили.
Я загрузил этот winio, там файл как я показал, без лишних _declspec.

Добавлено через 1 минуту
Цитата Сообщение от Oryel Посмотреть сообщение
в чем дело? их надо как-то по особому подключать?
Да потому что древний Builder может не понимать эти функции. Открой сам h-файл и посмотри, как они там объявлены.
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
03.12.2015, 16:50  [ТС] 10
nmcf,
У меня сей час под рукой несколько сред ..и везде проблемы свои

Все равно лает...
Windows.h...где его подключаешь?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
03.12.2015, 17:08  [ТС] 11
вот
0
Миниатюры
Переработка консольного приложения в оконное  
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
03.12.2015, 17:10 12
Это какая-то устаревшая версия. Сейчас эти ключевые слова с удвоенными подчёркиваниями. Вот так должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef WINIO_H
#define WINIO_H
 
#ifdef WINIO_DLL
#define WINIO_API __declspec(dllexport)
#else
#define WINIO_API __declspec(dllimport)
#endif
 
#include "Windows.h"
 
extern "C"
{
  WINIO_API bool __stdcall InitializeWinIo();
  WINIO_API void __stdcall ShutdownWinIo();
  WINIO_API PBYTE __stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool __stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool __stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool __stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool __stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  WINIO_API bool __stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API bool __stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API bool __stdcall RemoveWinIoDriver();
}
 
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
 
bool __stdcall StartWinIoDriver();
bool __stdcall StopWinIoDriver();
 
#endif
А сама библиотека у тебя есть? Скомпилировал?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
03.12.2015, 17:20  [ТС] 13
Сработало (в плане компиляции заголовка)..билиотека есть, подключена к проекту в разделе другие файлы

Вопрос...как из другого модуля cpp получить доступ, к примеру, к текстэдит?
Но есть другая ошибка...сей час вышлю
0
Миниатюры
Переработка консольного приложения в оконное  
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
03.12.2015, 18:32 14
Библиотека добавляется через Add Library, а не в Другие файлы.
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
04.12.2015, 09:49  [ТС] 15
nmcf,

Подключил, как внешнюю
в тексте проекта появилась строчка:
C++
1
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./ -lWinIo
Из других файлов удалил.

окей. начинаю компилить, идут ошибки

C++
1
2
D:\Soft\qtexa\Test2\mainwindow.cpp:21: ошибка: undefined reference to `_imp__InitializeWinIo@0'
collect2.exe:-1: ошибка: error: ld returned 1 exit status
Код формы, с строчкой, где ошибка...он неорпеделяет функцию из Библиотеки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
include "mainwindow.h"
#include "ui_mainwindow.h"
#include "winio.h"
#include <windows.h>
extern bool platform_main( void );
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
 
      if(InitializeWinIo())
        {
            ui->textEdit->append("Проверка пройдена");
        }
 
 
}
Добавлено через 1 минуту
в первой строчке не скопировался знак #
Ошибка в 21...не опознает функцию InitializeWinIo()
0
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
04.12.2015, 13:01 16
У меня такое было. Как не пытался сделать библиотеку из h-файла, не работало.
Потом я взял исходные тексты dll (там уже готовый проект VS, только для старой версии), конвертировал, скомпилировал и вот ту библиотеку, которая получается при этом, взял и добавил в проект Qt. Тогда ошибка исчезла. Но работает ли сама программа я не проверял.
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
04.12.2015, 13:18  [ТС] 17
nmcf, Подскажи тога, как получить доступ к текстовому полю(да и к любому объекту формы) из другого модуля cpp
0
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
04.12.2015, 13:23 18
Всё на объектах. Прямого доступа нет.
Для чего тебе это?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
04.12.2015, 13:50  [ТС] 19
nmcf,
есть модульное приложение многофайловое...и там нужно постоянно выводить информацию(ошибки/служебную)
и к примеру, в builder c++ там достаточно просто, подключил заголовочный, и там прописан указатеель и через него получаешь доступ

Схожим образом я получал в windwos form...это для меня удобно, т.к. много кода не надо перелопачивать..просто вместо старых ввода вывода консольных ставлю что-то такое
C++
1
f->textedit->append(L"Ошибка")
Просто других способов вывести информацию не знаю из других модулей...
Если подскажешь как это по уму сделать, или другой способ...Буду благодарен.

ЗЫ. мой уровень ООП пока низок, поэтому я делаю явно нарушая принципы, да и тривиальн решения могу не увидеть..
0
nmcf
6533 / 5757 / 2621
Регистрация: 14.04.2014
Сообщений: 24,494
04.12.2015, 13:57 20
Я просто не пойму, что за модули такие. Они как-то сами по себе, что ли, функционируют отдельно от приложения?
Если ты находишься в контексте формы, где textedit находится, то можешь просто по имени к нему обратиться.
Программа же на обработчиках обычно строится. Нажал кнопку - вызвал обработчик, а из него все элементы видны.
У тебя не так, что ли?
0
04.12.2015, 13:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2015, 13:57

пауза консольного приложения
что не так с кодом? он дает записывать в файл но при первой строчке он просто выдает &quot;?&quot; без кд и в...

Из консольного приложения в dll
Доброго времени суток. Есть консольный проект который нужно переделать в dll библиотеку....

Мню консольного приложения
написал с горем пополам прогу, к ней надо меню, сел меню делать, зашел в вот такой тупик:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.