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

» FAQ по Borland C++ Builder

Автор: SashKa
Дата сообщения: 15.02.2005 11:16
Собственно говоря в моем коде никто не мешает читать буферами, те функции которые я использую - они прежде всего именно такие. Вот тока как корректо отследить конец файла при таком подходе я не продумал. Можно правда до открытия считать атрибуты файла (вместе с размером) и подобрать размер буфера.
Автор: Prizrak7
Дата сообщения: 16.02.2005 01:17
modulo

Цитата:
может подкините названия функций, чтоб я знал про что читать

Если вы о Win32 API, то можете глянуть в раздел "Files I/O" MSDN Library, а конкретнее в сторону CreateFile() / ReadFile() / WriteFile() / CloseHandle() / итд (при этом не забывая проверять возвращаемые значения и выходные параметры, в случае надобности прибегая к GetLastError()). Это будет наверняка где-нибудь в разделе "Platform SDK", а вообще - воспользуйтесь индексом. В моей версии MSDN Lib под "Files I/O" есть под-раздел "Using I/O" с примерами использования этих и других функций. Есть в Win32 и более продвинутые фишки, но я думаю что это уж вовсе вам сейчас лишнее. Если у вас на машине MSDN Lib не установлен - либо пользуйтесь он-лайновой версией, либо сделайте поиск по хелпу C++Builder (с ним в комплектации поставляется Win32 reference, поищите ярлык на него в папке "C++Builder"->"MS SDK Help Files" - или ее эквиваленте на вашей машине - в меню Start виндов, или прямо из меню Help IDE).

А если не хотите заморачиваться на первых порах, можете воспользоваться функциями Run-Time Library : fopen() / fread() / fwrite() / fclose() / ferror() / feof() / итд. Им нужно передавать меньше параметров и вообще с ними общение проще. Примеры точно есть в MSDN Lib, и я практически уверен что и в хелпе C++Builder тоже.

Или как сказал SashKa, можно воспользоваться файловыми потоками C++, но это пожалуй будет сложнее на первых порах. Тогда понятное дело читать о ifstream / ofstream...

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


SashKa

Цитата:
Собственно говоря в моем коде никто не мешает читать буферами

А я разве утверждал что в ваш код кто-то мешает внести соответствующие изменения? Я высказался исключительно о текущем состоянии вашего кода!

Добавлено:
modulo

Хе-хе, не поленился таки открыть справку C++Builder!

Вот вам еще способ поиздеваться над бедной кошкой : "File management Routines" BCB. FileOpen() / FileRead() / FileWrite() / FileClose() плюс вспомогательные FileSeek() / FileExists() и др. Это уже "native" рутины BCB (т.е. часть VCL), так что они сработают только в BCB. И хотя примеры на них в справке есть, сама справка в BCB (как минимум по версию 5!) - крайне мерзкая, ни в какое сравнение с MSDN Lib не идет.
Автор: WhiteRabbit
Дата сообщения: 16.02.2005 11:02
Собираю в 6-м Builder консольный проект. Все работает на ура, НО: когда хочу перейти к релизу, как описано на предыдущей странице:


Цитата:
Чтобы перенести прогу на комп без билдера, и если ты работаешь только со стандартными компонентами и не пользуешь базы данных, по в свойствах проекта тыкни Release (Compiler), сними галочку с Build with Runtime Packages (Packages), сними галочку Use dynamic RTL (Linker) и прихвати в папочку программы borlndmm.dll и cc3260mt.dll из папки bin билдера.


Получаю пачку ошибок от линкера:

[Linker Error] Unresolved external 'System::__linkproc__ __fastcall WStrClr(void *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|wstring

[Linker Error] Unresolved external 'System::__linkproc__ __fastcall VarClear(System::Variant&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|variant

[Linker Error] Unresolved external 'System::__linkproc__ __fastcall WStrFromPWChar(System::WideString&, wchar_t *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|wstring

[Linker Error] Unresolved external '__fastcall Sysutils::WideCompareStr(const System::WideString, const System::WideString)' referenced from D:\Мои документы\BUILDER\Релиз 1.0\Program.OBJ

Не подскажете ли как с этим бороться ?
Автор: modulo
Дата сообщения: 16.02.2005 11:12
Prizrak7
ясно. работы теперь на неделю.
и ещё где взять этот msdnlib?
Автор: Prizrak7
Дата сообщения: 16.02.2005 17:55
modulo

Цитата:
ясно. работы теперь на неделю.

Ну, вам же сразу всеми способами не нужно это реализовать! У каждого из них свои преимущества и недостатки (скорость/portability/гибкость/итд) - выберите один и его долбайте помаленьку.


Цитата:
и ещё где взять этот msdnlib

У сисадмина или у того кто в вашей конторе заведует подпиской на MSDN. Или у приятеля программера скопировать (это обычно диска 3 получается). Линк на бесплатную и легальную он-лайн версию я уже привел. Кроме того - в известных местах : осел, сразу после выхода свежей версии - наверное BitTorrent и/или IRC, итд. Дура это большая, спору нету, так что без broadband за это лучше не браться, но уж очень подробная...

Кстати, о свежих версиях. MSDN Lib с некоторой периодичностью обновляется (раньше было - раз в квартал, как сейчас - не знаю) и высылается всем подписчикам. Для простых смертных и особенно начинающих, любая версия вышедшая в последние года 3-4, как минимум на первых порах подойдет. Попробуйте потрусить знакомых, может быть кто-то сжалится и просто отдаст вам старую версию...
Автор: modulo
Дата сообщения: 12.03.2005 11:30
вот такой диалог
SelectDirectory(OutDir,TSelectDirOpts() << sdAllowCreate << sdPerformCreate,0);
стремный!
там нет метода canclose! там нет create dir!
может есть какой-нибудь умный фильтр в OpenDialog, чтобы можно было каталог открыть??
Автор: 6epcepk
Дата сообщения: 13.03.2005 10:49
Добрый день.
Подскажите пжл какими способами можно писать кириллицей в исходном коде?
Если печатать в Виндоусе, в *.cpp, то при открытии программы в билдере отображаются слова аброкодаброй.
Переключение в самом билдере на кириллицу не получается (перепробовал все возможные варинты, говорят, что CTRL + SHIFT должен переключать, но не помогает).
Пробовал перекодировать файл *.cpp после редактирование его в блокноте в кодировку DOS, но это тоже ни к чему хорошему не привело ..


Answer:
Проблемку можно решить при помощи этих файлов (инструкции прилагаются).

Автор: ShIvADeSt
Дата сообщения: 13.03.2005 11:53
6epcepk
Попробуй в настройках редактора посмотреть какой шрифт используется, вроде была такая трабла, там надо утсановить шрифт Courier у которого есть Cyr
Автор: 6epcepk
Дата сообщения: 14.03.2005 20:19
Проблемку можно решить при помощи этих файлов (инструкции прилагаются).
Автор: modulo
Дата сообщения: 15.03.2005 12:56
Зацените:

Код:
int InHandle,OutHandle;
InHandle=FileOpen(Fragfile,fmOpenRead);
OutHandle=FileCreate(NewFile);
void *buffer=new char[100]; //от фонаря
if(OutHandle==-1)ProcessInfo->Lines->Add("FUCK!! error creating file ");
if(InHandle==-1)ProcessInfo->Lines->Add("FUCK!! error opening file ");

while(1){

FileRead(InHandle,buffer,100);
FileWrite(OutHandle,buffer,100);
ProcessInfo->Lines->Add("Part #" + IntToStr(filecntr)+ ": " + NewFile);

if(!eof(InHandle)){
ProcessInfo->Lines->Add("Hope all OK");
break;
}
if(filecntr>10) break;

NewFile=Partfilename + filecntr++;
OutHandle=FileCreate(NewFile);
if(OutHandle==-1)ProcessInfo->Lines->Add("FUCK!! error creating file ");
}

delete buffer;
FileClose(InHandle);
FileClose(OutHandle);
}
Автор: JohnC
Дата сообщения: 15.03.2005 19:46
Ребят, мне нужно получить код символа, как это можно в билдере организовать?
Автор: modulo
Дата сообщения: 16.03.2005 07:04
JohnC

Код:
int d='x';
Edit1->Text=IntToStr(d);
Автор: JohnC
Дата сообщения: 16.03.2005 18:07
modulo
Да, этот самый. Оказывается проще некуда.
Автор: JohnC
Дата сообщения: 09.04.2005 16:29
Подскажите, как работать со стандартным компонентом TClientSocket в отдельном модуле
не размещая компонент на форме, хочу поместить его в поток.
Автор: OdesitVadim
Дата сообщения: 09.04.2005 16:42
JohnC
Лучше воспользоваться Indy (Delphi 6/7). Там работа происходит с блокируещими сокетами. Всё очень просто.

Цитата:
компонентом TClientSocket

также как и с обычными компонентами. Нужно в Include добавить нужный модуль (я на Делфи пишу, поэтому на С имя модулей не назову). А потом стандарно создать, присвоить параметры.
Автор: JohnC
Дата сообщения: 10.04.2005 13:22
Если б было так просто. Например, создаю форму и делаю так
не размещая на форме компонент NMSMTP с закладки FastNet.
-------------------------Unit1.h------------------------
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <NMsmtp.hpp> //подключаю в ручную
#include <Psock.hpp> // для копанента NMSMTP
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
TNMSMTP *SMTP; //добавляю сам
void __fastcall SMTPConnect(TObject *Sender);//добавляю сам
};
extern PACKAGE TForm1 *Form1;
#endif
-------------------Unit1.cpp---------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ }
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SMTP->Name="SMTP";
SMTP->ClearParams=true;
SMTP->Charset="us-ascii";
SMTP->EncodeType=uuMime;
SMTP->Host="smtp.mail.ru";
SMTP->SubType= mtPlain;
SMTP->Port=25;
SMTP->UserID="alex";
SMTP->Connect();
}
void __fastcall TForm1::SMTPConnect(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
Причем код компилируется, но при попытке выполнения вываливается ошибка.
Если я помещаю компонент на форму, но имя в Object Insepector ставлю не "SMTP", то также
ничего не работает.
Кто знает, как правильно сделать.
Автор: OdesitVadim
Дата сообщения: 10.04.2005 14:03
JohnC
Я в С не силен, но кажеться конструктор вызывать надо. А ошибочка случайно не формата Access Violation ?
Автор: JohnC
Дата сообщения: 10.04.2005 17:18
OdesitVadim

Цитата:
А ошибочка случайно не формата Access Violation ?

да, это самая, есть соображения?
Автор: OdesitVadim
Дата сообщения: 10.04.2005 17:37
JohnC
Всё указывает на то, что не вызывается конструктор. А саму ошибочку в студию можно? (когда появиться окошко с ошибкой нужно нажаьб Ctrl+C - текс окна скопируется в буфер.) и строку проги, где собственно ошибка.
Автор: JohnC
Дата сообщения: 10.04.2005 19:55
спотыкается на SMTP->Name="SMTP";
---------------------------
Access violation at address 004019C3 in module 'Project1.exe'. Read of address 00000000.
---------------------------

если убрать SMTP->Name="SMTP";
тогда на SMTP->Charset="us-ascii";
---------------------------
Access violation at address 0042478C in module 'Project1.exe'. Write of address 00430047.
---------------------------

и т.д.
Автор: EZH
Дата сообщения: 10.04.2005 20:19
JohnC
Так ты же не создал объект!
В заголовочном описал указательна объект ( TNMSMTP *SMTP;//добавляю сам), а реально не создаешь.
Пиши в конструкторе формы SMTP = new TNMSMTP(); (может с параметрами, если есть)
А в деструкторе формы delete SMTP
Автор: OdesitVadim
Дата сообщения: 11.04.2005 10:24
JohnC
Правильно EZH написал. Это конструктор и есть.
Автор: JohnC
Дата сообщения: 11.04.2005 14:27
EZH
OdesitVadim
Спасибо! все заработало.
Автор: spike
Дата сообщения: 13.04.2005 15:36
надо сделать простую вещь, а я не понимаю как:
- Хочу чтобы по нажатию ESCAPE закрывалась текущая форма
- Когда жмут ALT+А4 или Крести закрытия приложения, чтобы спрашивало, действительно хочет или нет ? т.е. как остановить процесс закрытия приложения
Автор: EZH
Дата сообщения: 13.04.2005 15:51
spike
Для обработки Esc можно:
- написать событие формы OnKeyPress и в нём вызывать Close()
- посадить на форму любой контрол с экшном, у которого в шорткате стоит Esc. в обработчике экшна тот же Close()

Спросить перед закрытием можно в событии формы OnCloseQuery и отменить закрытие.
Автор: BlackSNOW
Дата сообщения: 14.04.2005 12:44
Народ а никто не поделится ссылочкой на электронный учебник по С++ вот хочется на досуге почитать?! И скажите пожалуйста на ваш взгляд более комфортаная и удобная в это же время восстребованная какая среда разработки является?
Автор: spike
Дата сообщения: 14.04.2005 23:11
EZH
а как в ActionList добавить свои кнопки, а то там Escape нету
Автор: EZH
Дата сообщения: 15.04.2005 01:03
spike
Так и напиши ручками Esc
Если нужен Enter - так и пиши Enter
Автор: Sprehenbreher
Дата сообщения: 15.04.2005 12:28
Вопрос такой:
как в пятом билдере осуществить работу с базой данных, которая содержит русский текст? (фишка типа preferences->font->courier(русский) в database designer'e не работает)
Автор: EZH
Дата сообщения: 15.04.2005 12:47
Sprehenbreher
Ну без подробностей тут не обойтись, что за сервер БД, какие компоненты для доступа...

Страницы: 12345678910111213141516171819202122232425262728

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


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