Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» FAQ по Borland C++ Builder

Автор: DeviL
Дата сообщения: 15.11.2005 09:50
Блин чето я не совсем разберусь где API а где не API
Есть два варианта работы с файлами:
через структуру FILE
через дескриптор
есть также два варианта функций CreateFile и FileCreate - в чем их собственно разница?
Есть так же еще функции WinAPI для настройки компорта (я в основном считываю из него и преобразуя пишу в файл) типа SetCommConfig (точно не помню), также порт там вроде описан структурой.
ну ладно тут хоть какой то просвет есть. А как работать с портом как с потоком
если сделать анологию то нужно открыть файл

Код: ifstream comport("COM1");
Автор: Dunkel1
Дата сообщения: 15.11.2005 18:37

Как правильно поставить компоненту в Билдере 6, если имеются следующие файлы: componet.bpk, component.cpp, component.obj, component.res ?

З.Ы. Я делаю так: Component -> Install Component... -> Into new package -> Package file name = componet.bpk, Unit file name = component.cpp
Потом все компилится, инсталлируется. Но компонента не появляется.
Автор: vndovr
Дата сообщения: 15.11.2005 23:08
DeviL
Работа с файлами организуется на уровне операционной системы, которая предоставляет для этого набор функций. Т.е. - в Win32 это CreateFile и т.д. Это и есть API операционной системы.

Язык. Предполагается (изначально) что язык может работать на различных операционных системах и он предосталяет свои функции для работы с файлами - в С сюда относится работа, как ты говоришь, через дескрипторы и посредством структуры FILE. Это - часть языка. Для конкретной операционной системы они реализуются через вызовы API (для той же Win32 это использование CreateFile для открытия, создания файла и т.д.). Те средства которые предоставляются языком обычно стандартизируются и на разных операционных системах для конкретного языка их описание одинаково.

С точки зрения переносимости кода - пользоваться только средствами, предоставляемыми языком программирования и не пользоваться API операционной системы.

С точки зрения быстродействия (вопрос спорный для файлового в/в), расширенных или каких-либо дополнительных возможностей - API операционной системы.
Автор: DeviL
Дата сообщения: 16.11.2005 10:18
Как я понял к дополнительным возможностям относятся такие вещи как работа например со структорй описывающей свойства открытого com порта?
то есть стандартные функции работы с файлами - это только для файлов? но как то же раньше работали с com портом - взять теже потоки? хоть в стиле С хоть в С++.
И если кто знает подскажите что-нить об обработчиках событий.
Автор: vndovr
Дата сообщения: 16.11.2005 11:41
http://anatolix.naumen.ru/Books/Richter?v=68d - скачиваешь, читаешь, там все детально описано.
Автор: DeviL
Дата сообщения: 16.11.2005 14:03
Книжки это хорошо - но так хотелось пообчатся с живыми представителями сведущими в данной области
Не прикольно ведь одному сидеть читать и разбирать ...
Автор: russianczar
Дата сообщения: 16.11.2005 19:22
Взялся за С++, ну конечно же многие кто начинал недавно наверника начинали со знаментивого конвертатора температур (может я туплю, но мне в трех разных книжках встречалась эта прога)

Ну да не важно, соль в том, что все проги которые я пока-что пишу по книге - досовские. Если я их запускаю в C++ Builder 6, они открываются в обсолютно пустом окне с заголовком Form 1 и больше ничего... тоест просто серое поле.. Как заставиьт его компилировать в досовский вариант?

Вот пример из программ:

// Programm that would give me an average of three entered values.

#include <stdio.h>
#include <iostream.h>

int main()
{

//Defining my variables
int nValue1;
int nValue2;
int nValue3;

//I/O collecting info
cout << "Please enter your first number to be averaged: ";
cin >> nValue1;

cout << "Please enter your second number to be averaged: ";
cin >> nValue2;

cout << "Please enter your third number to be averaged: ";
cin >> nValue3;

//Now we are going to do our math
int nResult;
nResult = (nValue1 + nValue2 + nValue3)/3;

cout << "The average of the three entered numbers is: ";
cout << nResult;

return 0;

}
Автор: FuzzyLogic
Дата сообщения: 16.11.2005 19:28
Когда создаешь новый проект, тип проекта указываешь как Console Application (Консольное приложение)

пошагово:
http://support.borland.com/entry.jspa?externalID=3472&categoryID=172
Автор: russianczar
Дата сообщения: 16.11.2005 19:56
Спасибо FuzzyLogic,
что за ошибка такая появилась? На любой код:
[Linker Error] Unresolved external '_main' referenced from E:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\C0X32.OBJ
Автор: russianczar
Дата сообщения: 17.11.2005 19:45
Ребята выручайте, не могу компилить ничего токлом.. пишет Linker Error ....
Автор: vndovr
Дата сообщения: 17.11.2005 22:26
У тебя в коде функция main есть? Линковщик ее найти не может
Автор: russianczar
Дата сообщения: 18.11.2005 05:07
есть, ошибка не зависимо от кода, проверял и на скачанных..
Автор: Kott
Дата сообщения: 18.11.2005 05:21
Зайди в редактирование опций проекта (Project\Edit Option Source) и проверь - присутствует ли библиотека import32.lib. Так же проверь, этот раздел должен выглядеть вот так:

Код:
<LINKER>
<ALLOBJ value="c0x32.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib"/>
<OTHERFILES value=""/>
</LINKER>
Автор: russianczar
Дата сообщения: 18.11.2005 19:20
Заработало как только сохранил проект
Но теперь такое дело, в досе код до конца не выполняется, я ввожу данные и он не показывая результата - закрывается
Автор: Kott
Дата сообщения: 18.11.2005 20:22
Он показывает скорее всего - ты просто его увидеть не успеваешь Запусти его под Far-ом или из консоли и все тебе покажет. Для того что бы программа не завершалась тебе необходимо или организовать бесконечный цикл и вводить с консоли команды или просто вставить

Код:
cout << "The average of the three entered numbers is: ";
cout << nResult;
cin >> nValue3;
return 0;
Автор: russianczar
Дата сообщения: 19.11.2005 01:37
тема... как ж я сам не догадался. Спасибо, помогло.
Автор: DeviL
Дата сообщения: 29.11.2005 09:57
Привет народ!
Возникла проблема. У меня на форме есть стандартный диалог сохранения (сохраняю данные в файл) и кнопка которая вызывает файл помощи (что-то подобное helpJmp(точно не помню)). так вот в настройках проекта и формы написал имя файла test.hlp так как файл находится в одной директории с программой, но после того как я сохраняю какой нить файл(совсем другой) в другом каталоге то help файл больше не открывается. пишет что не удалось найти файл (я так понял он начинает искать его в той директории где я сохранил файл диалогом сохранения) - как бы мне сделать чтобы он нормаьлно искался в это директории? в чем грабли

+ столкнулся с еще одним неприятным моментом - у компоненты сохранения дописал добавлять расширение по умолчанию , но этот гад добавляет его только когда я закончил работать с диалогом , т.е. когда я нажал сохранить в диалоге и вызвался обработчик то расширение еще не дописано. а вот когда выхожу из обработчика и начинаю выполнять след строку кода он добавляет расширение(приходится делать как-то совсем коряво - в обработчике ставить флаг (сохранять или нет) а дальше в программе проверять нужно ли сохранять и только тогда использовать имя файла полученое от диалога)
Автор: DeviL
Дата сообщения: 02.12.2005 09:19
Очень джаль что никто не ответил!
Ведь все оказалось так просто.
1. добавлением ExtractFileDir(Application->ExeName)
2. использование флага ofExtensionDifferent (что мне кажется всеравно не особо логично реализованым - ну дане мне судить)

Ладно попытаю сщастья еще разок
Не обходимо хранить вместе с программой базу коэффициентов + ее не должны править(если не знают пароля)! думаю сделать ее криптованым файлом!
То есть все просто - допустим есть три объекта 1 .. 2 .. 3. в программе выбираем объект и из файла берутся соответсвующие ему коеффициенты. Плюс там же в программе есть возможность их редактировании - но при сохранении коэф. требуется пароль. Если ввели пароль то обновляем данные в базе!
Может какой компонент есть для такого
Автор: greenfox
Дата сообщения: 02.12.2005 10:19
1. Если на форму накатить 2 таймера и выставить на обоих одинаковую величину таймера - какой из них первым получит упраление (имеется ввиду код функции срабатывающий по OnTimer)!?
2. Компонент типа TCSpinEdit - можно в нём как сделать что бы цифры по середине были!? Или есть что-н похожее из других компонентов!? (или проще самому сделать!?)

заранее спасибо.
Автор: EZH
Дата сообщения: 02.12.2005 13:00
greenfox
1. Видимо тот, который ты раньше сделаешь Endabled (или Active - не помню). В любом случае можно ввести флаг, который будет устанавливаться первым сработавшим таймером.
Автор: greenfox
Дата сообщения: 02.12.2005 13:11
EZH
они оба изначально enabled
про флаг не понял - типа просто внести переменную и в неё писать что мол таймер 1 сработал и т.о. второй таймер через неё узнает что он второй!?
ps интересно всё же как именно компилятор в таком случае распределяет управление... мне вот надо что бы жёстко: 2 таймера, одинаковый интервал - сначало 1-й таймер потом второй...
Автор: EZH
Дата сообщения: 02.12.2005 13:28
greenfox
Про флаг правильно понял, а про Enabled - так ты программно их включай Если ты в дизайне их включил, то предположу что они видимо срабатывают в порядке их следования в DFM. Создаются ведь они всё рано последовательно.
Автор: greenfox
Дата сообщения: 02.12.2005 13:40
EZH

Цитата:
Если ты в дизайне их включил, то предположу что они видимо срабатывают в порядке их следования в DFM. Создаются ведь они всё рано последовательно.
хм... т.е. типа что первое включилось то превое и управление получает? Надо попробовать!
Автор: EZH
Дата сообщения: 02.12.2005 13:59
greenfox
Не, не то что первое включилось, а тот компонент что первый бал создан (или по крайней мере первый был вериализован в DFM). Даже если ты его включил вторым, но он был создан первым, то вероятно он и заработает перым. В общем проверять надо.

А вообще хорошей практикой будет включать такие важные моменты программно, а не в дизайне, иначе через пол года поди потом разберись в коде как оно должно работать и почему так.
Автор: greenfox
Дата сообщения: 05.12.2005 12:56
EZH
поигрался с таймерами - срабатывает первый тот который на форме первый enabled Перестановка кто первый инициализируется походу не при чём...


Вопросик такого плана - есть где набор уже готовых компонент!? Например интересует таймер в виду круговой диаграммы - ну что бы не числа отсчитывалис а кружок бежал...
Автор: EZH
Дата сообщения: 05.12.2005 13:32
Может проще TChart PieChart поставить и в OnTimer менять его чем цеплять нестандартный компонент?
Автор: greenfox
Дата сообщения: 05.12.2005 13:44
EZH

Цитата:
PieChart поставить
я так сейчас и сделал - но всё же он несколько угловатый (напр у него почему то visible нету !? :\ )... просто думал может уже есть готовый компонент...

ps может есть у кого ссылочки на сайты где компоненты собраны сторонни разработчиков!?
Автор: greenfox
Дата сообщения: 07.12.2005 12:09
А вот такой вопрос по таймерам:
Он позволяет выставить 1 мс минимум - а вообще насколько точно винда будет соблюдать этот интервал!?
Автор: alander
Дата сообщения: 07.12.2005 12:56

Цитата:
А вот такой вопрос по таймерам:
Он позволяет выставить 1 мс минимум - а вообще насколько точно винда будет соблюдать этот интервал!?


Win это не ОС реального времени, так что выполнение никто не гарантирует.
но вообще я с таким не сталкивался.
Автор: EZH
Дата сообщения: 07.12.2005 13:07

Цитата:
А вот такой вопрос по таймерам:
Он позволяет выставить 1 мс минимум - а вообще насколько точно винда будет соблюдать этот интервал!?

Всё зависит от приоритета твоей задачи и от загруженности системы другими задачами (плюс их приоритеты)

Страницы: 12345678910111213141516171819202122232425262728

Предыдущая тема: ms exchange


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.