Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Компиляция Win-приложений в Borland C++ 5.0

2.1K
30 ноября 2002 года
ufo
9 / / 28.11.2002
Люди! У меня проблема с компиляцией Win-приложений в С++ 5.0. Все дело в том, что что бы я не делал, но программа компилится под дос. При запуске такого приложения, открывается ДОС-окно и по завершению работы программы оно исчезает. Если вдруг кто знает, в чем проблема, скажите мне пожалуйста. Может в настройках что-либо нужно делать? Я перепробывал практически все, но все оказалось бесполезно. Все-равно компилится DOS приложение. Компилировал я простейшую программу без ресурсов и других наворотов:

#include <stdio.h>
void main ()
{
printf ("FUCK OFF");
}

Помогите пожалуйста!!
1.7K
30 ноября 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by ufo
Люди! У меня проблема с компиляцией Win-приложений в С++ 5.0. Все дело в том, что что бы я не делал, но программа компилится под дос. При запуске такого приложения, открывается ДОС-окно и по завершению работы программы оно исчезает. Если вдруг кто знает, в чем проблема, скажите мне пожалуйста. Может в настройках что-либо нужно делать? Я перепробывал практически все, но все оказалось бесполезно. Все-равно компилится DOS приложение. Компилировал я простейшую программу без ресурсов и других наворотов:

#include <stdio.h>
void main ()
{
printf ("FUCK OFF");
}

Помогите пожалуйста!!



Хм... А куда ты хочешь выводить вот это вот "приветствие"? Если на "окно", то в твоём коде про "окна" ничего не сказано. :)
Видимо, ты просто выбрал не тот проект. Если мы говорим про Borland C++ Builder, то обычный виндузовый проект открывается при старте Builder'a. Если мы говорим про просто Borland C++, то ничем помочь не смогу.
А вообще, признаком того что, это будет вин-приложение является наличие функции WinMain.

3
30 ноября 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Mark


Хм... А куда ты хочешь выводить вот это вот "приветствие"? Если на "окно", то в твоём коде про "окна" ничего не сказано. :)
Видимо, ты просто выбрал не тот проект. Если мы говорим про Borland C++ Builder, то обычный виндузовый проект открывается при старте Builder'a. Если мы говорим про просто Borland C++, то ничем помочь не смогу.
А вообще, признаком того что, это будет вин-приложение является наличие функции WinMain.



А если функции с таким именем нет?
То приложение будет не "виндовым"?
Что ты понимаешь под виндовым приложением?

Т.е. если всё начинается так (см. ниже), то это уже точно не "виндовое" приложение?

#pragma comment(linker,"/ENTRY:StartPoint")

void StartPoint(void)
{
........
}

1.7K
30 ноября 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Green


А если функции с таким именем нет?
То приложение будет не "виндовым"?
Что ты понимаешь под виндовым приложением?

Т.е. если всё начинается так (см. ниже), то это уже точно не "виндовое" приложение?

#pragma comment(linker,"/ENTRY:StartPoint")

void StartPoint(void)
{
........
}


В общем согласен с тобой, но ответ был на уровне вопроса (не в обиду, ufo). Этого ответа ведь достаточно, чтобы понять куда копать?

В примере идея понятна, но у comment'а нет типа linker.

250
30 ноября 2002 года
Joker
1.4K / / 20.02.2000
Полюбому у тебя получается не дос, приложение, а консольное приложение WIN32.
А чтобы написать приложение под вин с нуля ручками(всмысле оконное), прочитай Ч. Петзоля , многое станет понятно.

А про main и WinMain() это вообще отдельная песня... (но это не определяет консольное или оконное )
2.1K
01 декабря 2002 года
ufo
9 / / 28.11.2002
Цитата:
Originally posted by Joker
Полюбому у тебя получается не дос, приложение, а консольное приложение WIN32.
А чтобы написать приложение под вин с нуля ручками(всмысле оконное), прочитай Ч. Петзоля , многое станет понятно.

А про main и WinMain() это вообще отдельная песня... (но это не определяет консольное или оконное )



Блин. :( Я действительно не тот пример привел. Вернее не совсем подходящий. Программа, которю я хочу скомпилить не будет выводить ничего на экран. Она вообще не будет давать о себе знать пользователю. В том простом примере, который я привел, даже если убрать printf все равно DOS окно вылетать будет. Если чесно - я DOS кодер и только недавно начал перебираться на Win32. Возможно кто-нибудь знает ссылку на литературу, которую мне стоило бы прочитать? Я не совсем понимаю что представляет из себя WinMain(). Очень жду от вас помощи! В книгах, которые у меня есть, ответа на этот вопрос нет :(.

250
02 декабря 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by ufo


Блин. :( Я действительно не тот пример привел. Вернее не совсем подходящий. Программа, которю я хочу скомпилить не будет выводить ничего на экран. Она вообще не будет давать о себе знать пользователю. В том простом примере, который я привел, даже если убрать printf все равно DOS окно вылетать будет. Если чесно - я DOS кодер и только недавно начал перебираться на Win32. Возможно кто-нибудь знает ссылку на литературу, которую мне стоило бы прочитать? Я не совсем понимаю что представляет из себя WinMain(). Очень жду от вас помощи! В книгах, которые у меня есть, ответа на этот вопрос нет :(.


ВСя фича в том, что структура у вин программы немног сложнее т.е поскольку ввиндовс все построено на событиях то должен быть их обработчик .., и.тд., билдер все скрывает от глаз программиста, если хочешь реально в этом разобраться ищи книгу Ч. Петзоля , программирование в виндовс 95 конешно уже усторела, но книга реально рульная..

2.2K
02 декабря 2002 года
M_Fighter
15 / / 20.11.2002
Цитата:
Originally posted by ufo


Блин. :( Я действительно не тот пример привел. Вернее не совсем подходящий. Программа, которю я хочу скомпилить не будет выводить ничего на экран. Она вообще не будет давать о себе знать пользователю. В том простом примере, который я привел, даже если убрать printf все равно DOS окно вылетать будет. Если чесно - я DOS кодер и только недавно начал перебираться на Win32. Возможно кто-нибудь знает ссылку на литературу, которую мне стоило бы прочитать? Я не совсем понимаю что представляет из себя WinMain(). Очень жду от вас помощи! В книгах, которые у меня есть, ответа на этот вопрос нет :(.



Вместе с 5-ым билдером идет довольно неплохой хелп по Win API. Если с англииским, не очень смотри на cracklab.narod.ru описание функций виндувс.

2.0K
02 декабря 2002 года
judic
7 / / 14.10.2002
Ну вобщем ты понял, - если хочешь побыстрее начать кодить под винды поставь себе Borland C++ Builder (а не просто С++). Книжек по работе с ним много (как виртуальных - cкажем aport.ru так и реальных). Ну а если ты действительно хочешь все с нуля писать (на это должны быть веские причины - хацкер?) то придется поковыряться конкретно (но лучше не недо:).
2.1K
02 декабря 2002 года
ufo
9 / / 28.11.2002
Цитата:
Originally posted by judic
Ну вобщем ты понял, - если хочешь побыстрее начать кодить под винды поставь себе Borland C++ Builder (а не просто С++). Книжек по работе с ним много (как виртуальных - cкажем aport.ru так и реальных). Ну а если ты действительно хочешь все с нуля писать (на это должны быть веские причины - хацкер?) то придется поковыряться конкретно (но лучше не недо:).



Вот в том то и дело, что мне нужно все с нуля. К стати, у меня есть еще один вопросец. Когда я смотрел в настройках проекта в C++ 5.0, то не нашел там модели памяти Flat. На сколько я помню, при кодинге на асме под Win обязательно задается модель Flat а не Small или еще что-либо. как это вообще объясняется? Неужели проект компилится под Win с моделью Small? Разьве это реально?
Последний вопрос, и очень для меня важный. У меня возникла проблема с выделением памяти. mlloc выделяет не более 64 Кб в сумме от всех выделений в программе, пытался выделить farmalloc, переопределил переменный на far типы far char, но функция read (чтение из файла) напрочь отказалась работать с новым типом. Кто-нибудь может мне сказать, в чем тут проблема? Возможно вместе с farmalloc нужно менять и read на другую функцию?? Помогите плиз!!!

3
02 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ufo


Вот в том то и дело, что мне нужно все с нуля. К стати, у меня есть еще один вопросец. Когда я смотрел в настройках проекта в C++ 5.0, то не нашел там модели памяти Flat. На сколько я помню, при кодинге на асме под Win обязательно задается модель Flat а не Small или еще что-либо. как это вообще объясняется? Неужели проект компилится под Win с моделью Small? Разьве это реально?
Последний вопрос, и очень для меня важный. У меня возникла проблема с выделением памяти. mlloc выделяет не более 64 Кб в сумме от всех выделений в программе, пытался выделить farmalloc, переопределил переменный на far типы far char, но функция read (чтение из файла) напрочь отказалась работать с новым типом. Кто-нибудь может мне сказать, в чем тут проблема? Возможно вместе с farmalloc нужно менять и read на другую функцию?? Помогите плиз!!!



В 32-разрядных системах уже нет такого гемороя с памятью. Т.е. можешь считать, что по умолчанию всё flat.
Я бы советовал выделять память с помощью new:
pBuf = new char[BufSize];
А для работы с файлом - стандартные ф-ции Win32API (CreateFile, ReadFile, WriteFile), т.к. все остальные ф-ции в штатном режиме, все равно, вызывают именно их.

2.1K
02 декабря 2002 года
ufo
9 / / 28.11.2002
Цитата:
Originally posted by Green


В 32-разрядных системах уже нет такого гемороя с памятью. Т.е. можешь считать, что по умолчанию всё flat.
Я бы советовал выделять память с помощью new:
pBuf = new char[BufSize];
А для работы с файлом - стандартные ф-ции Win32API (CreateFile, ReadFile, WriteFile), т.к. все остальные ф-ции в штатном режиме, все равно, вызывают именно их.



Огромное спасибо за подсказку!
А эта "new" реально может выделить более 64 Кб? Она не глючит при выделении больших объемов памяти? А то я слышал, что в Win9x иногда происходят глюки при выделении больших участков памяти.
И на счет моделей. Если Flat выставляется по умолчанию и изменению не подлежит, то зачем предоставлен выбор моделей в настройках? Совсем непонятно :(
P.s.
В c++ 3.1 нормально работает "new"?

3
02 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ufo


Огромное спасибо за подсказку!
А эта "new" реально может выделить более 64 Кб? Она не глючит при выделении больших объемов памяти? А то я слышал, что в Win9x иногда происходят глюки при выделении больших участков памяти.
И на счет моделей. Если Flat выставляется по умолчанию и изменению не подлежит, то зачем предоставлен выбор моделей в настройках? Совсем непонятно :(
P.s.
В c++ 3.1 нормально работает "new"?



Стоп! Ты работаешь на BC++ 3.1 ?
Тогда всё вышесказанное мной отменяется. В BC++ 3.1 16-битный компиллер, т.е. new только до 64к. Чтобы работать с более 64к, тебе нужна модель Huge. Только я бы посоветовал пересесть на 32-битные компиляторы, т.е. от ВС++ 5, проблем будет меньше, кроме памяти например, еще надо буде заморачиваться с вызовом ф-й 32-битных DLL (а они почти все 32-битные) из 16-разрядного приложения, и т.п.
А совсем идеальный вариант: работать на VC++ используя WTL, а не MFC. Тогда почти всё сделаешь ручками, как оно требуется, а не как предлагают ребята из Борланда и MS.

2.1K
02 декабря 2002 года
ufo
9 / / 28.11.2002
Цитата:
Originally posted by Green


Стоп! Ты работаешь на BC++ 3.1 ?
Тогда всё вышесказанное мной отменяется. В BC++ 3.1 16-битный компиллер, т.е. new только до 64к. Чтобы работать с более 64к, тебе нужна модель Huge. Только я бы посоветовал пересесть на 32-битные компиляторы, т.е. от ВС++ 5, проблем будет меньше, кроме памяти например, еще надо буде заморачиваться с вызовом ф-й 32-битных DLL (а они почти все 32-битные) из 16-разрядного приложения, и т.п.
А совсем идеальный вариант: работать на VC++ используя WTL, а не MFC. Тогда почти всё сделаешь ручками, как оно требуется, а не как предлагают ребята из Борланда и MS.



Да я понимаю что на визуальном C будет все пучком под Win, но мне ни в коем случае нельзя писать мой проект на визуальных языках. Так я бы уже давно написал. А C++ 3.1 я использую только из за того, что он единственный компилит мою прогу по Win так, что при запуске никакого дос-окна не вылазит. Даже при выводе текста на экран открывается отдельное Win окно, а DOS окном, как в C++5 даже и не пахнет. Буду очень благодарен, если кто-нибудь приведет мне простейший пример компиляции Win приложения в C++ 5.0 Желательно без вывода текста на экран. Главное чтоб DOS-окно не вылазило. Пусть прога будет складывать 2 числа и все. Пожалуйста! Великие кодеры, помогите!!!! К исходнику этой простейшей проги, желательно описать все изменения дефолтовых настроек. Буду ооочень благодарен! Могу даже отблагодарить, но на счет расплаты только по мылу [email]ufo@cu-amagzine.ru[/email]. Мне ооочень нужна ваша помощь!

3
02 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ufo

А C++ 3.1 я использую только из за того, что он единственный компилит мою прогу по Win так, что при запуске никакого дос-окна не вылазит. Даже при выводе текста на экран открывается отдельное Win окно, а DOS окном, как в C++5 даже и не пахнет.



Кто тебе такую глупость сказал?
Я уже давно не юзал Борландовские продукты, но попробуй установить любую среду разработки от BC++ 5. Создай новый проект, там наверняка будет что-то типа визарда, укажи, что нужен проект под винды.

831
03 декабря 2002 года
S_T
117 / / 23.10.2002
Если хочешь писать кульные проги под винды, которые скрываются от юзеров, которые делают всякие прикольные штучки, выходящие за рамки возможностей библиотеки VCL. Хочешь писать что-то свое - ставь себе MS VC++ и MSDN Library - немного терпения, немного вопросов на соседнем форуме, много знания английского языка - и во всем, что надо разберешься.
А по поводу твоего вопроса про Борланд Ц++ 5.0. К сожалению, пятого у меня нет. И вот, запускаю я свой старенький Borland C++ 5.02 (я бы его давно прибил, если бы препод программы под него не требовал, которые я все равно под МСВЦ++.НЕТ пишу). И что я вижу? А вижу я Заголовок, строку меню и пустое серенькое пространство. Так вот, выбираю я File->New->Project. Задаю Project Path and Name, Target Name (к примеру, C:\FUCKOFF\message и messgae). Target Type задаю Application(.exe). В окнах Frameworks, Controls, Libraries убираю все галочки. Ставлю переключатель Static. Platform выбираю Win32. TargetModel выбираю GUI. (замечу, что многое Борланд сделали за меня по умолчанию).
Теперь я нажимаю кнопульку OK. Удаляю из проекта файлы message.def и message.rc. Дважды кликаюсь на message.cpp. Появляется пустое окно. Пишу там такой текст:

#define STRICT
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x400

#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
int a,*b;
double c;
char str[1024];

b=new int[655360];
for(a=0;a<655360;a++)
b[a]=a;
c=0.0;
for(a=0;a<655360;a++)
c+=b[a];

sprintf(str,"FuckOff: %lg",c);
MessageBox(NULL,str,"Ahtung!",MB_OK | MB_ICONSTOP);

return 0;
}

Потом, запустив эту программу, получил, сообщение такого вида: FuckOff: 2.14748e+11
Потом взялся за калькулятор (виндовский, стандартный) и, вспомнив формулу арифметической прогрессии, посчитал 655360*655359/2 и получил 214748037120 - ну почти правильно мой калькулятор посчитал... я так думаю...
Как видим, тут и виндовское приложение без дос-окна, тут и выделение памяти более 65к (точнее 650к за раз), и сложение пары чисел, и даже вывод на экран. Вобщем делай, что хошь...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог