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

» FAQ по Borland C++ Builder

Автор: modulo
Дата сообщения: 12.12.2004 11:40
вобщем проблема в следующем: сделал я тут покер на билдере, при запуске на других компах он требует какую-то библиотеку
отсюда вопрос: где в билдере отключаются ненужные библиотеки, и как узнать какие из них ненужные? или мне всё-таки придется делать инсталятор?
Автор: WiseAlex
Дата сообщения: 12.12.2004 12:08

Цитата:
он требует какую-то библиотеку

точность и информативность фразы сразу выдают профессионального програмимиста
требует скорее всего библиотеку визуальных компонентов, так подключи ее статически - должно быть где-то в меню (не поленись поискать)
Автор: modulo
Дата сообщения: 12.12.2004 12:51

Цитата:
точность и информативность фразы сразу выдают профессионального програмимиста

был бы я профи я бы не стал спрашивать тупые вопросы

я имел в виду саму программу (exeшник), когда его на дискете кидаешь на другой комп, он не запускается
Автор: WiseAlex
Дата сообщения: 12.12.2004 13:29
modulo

Цитата:
я имел в виду саму программу (exeшник),

это как раз понятно
а вот фраза
Цитата:
какую-то библиотеку
- нет. Обычно система рассказывает какая библиотека нужна, кроме того есть плагин к totalcommander'у, который показывает весь список dll, необходимых для выбранного приложения
Автор: modulo
Дата сообщения: 12.12.2004 13:46
проблема в том, что я не помню какая там dll нужна, завтра посмотрю

ещё вопрос:
как я понял чтобы выполнить ShellExecute, надо сначала выполнить FindEcecutable, чтобы найти handlera, значит делаю такую хрень:

Код:
char* Result="nothing";
char* file="A.mp3";
char* dir="C:\cd\0";

FindExecutable(
file, // pointer to string for filename
dir, // pointer to string for default directory
Result // pointer to buffer for string for executable file on return
);
Автор: EZH
Дата сообщения: 12.12.2004 14:32
modulo
Чтобы перенести прогу на комп без билдера, и если ты работаешь только со стандартными компонентами и не пользуешь базы данных, по в свойствах проекта тыкни Release (Compiler), сними галочку с Build with Runtime Packages (Packages), сними галочку Use dynamic RTL (Linker) и прихвати в папочку программы borlndmm.dll и cc3260mt.dll из папки bin билдера.

Чтобы выполнить ShellExecute тебе нафиг не нужен FindExecutable.

Код:
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
Автор: modulo
Дата сообщения: 12.12.2004 15:36
да я пробовал уже, вот такую штуку компилятор пропускает, но прога не выполняет:

Код:
ShellExecute(NULL, "open", "C:\cd\a.mp3", NULL, NULL, SW_SHOWNORMAL);
Автор: EZH
Дата сообщения: 12.12.2004 15:40
modulo
попробуй писать не C:\cd\a.mp3, а C:\\cd\\a.mp3
Автор: modulo
Дата сообщения: 12.12.2004 16:37
супер! заработала! спасибо за хелп
Автор: modulo
Дата сообщения: 22.01.2005 11:20
подскажите какие-нибудь хорошие сайты по программированию на билдере (чё-нибудь для начинающих)
Автор: nobody2
Дата сообщения: 22.01.2005 12:00
Ищи книги Архангельского по билдеру - как раз для начинающих.
Из той же серии статьи с citforum.ru
и все сайты, содержащие builder в названии
Автор: modulo
Дата сообщения: 24.01.2005 11:19
отвечая на собственный вопрос
http://www.buildercpp.net.ru/

Добавлено:
я тут делаю кнопку browse мне надо выбрать папку, TOpenDiag открывает файлы, а мне надо папку, есть такой компонент?
Автор: ZZmiy
Дата сообщения: 24.01.2005 13:01
modulo

Цитата:
а мне надо папку

SHBrowseForFolder -
http://www.citforum.ru/operating_systems/windows/shell/
http://decoding.narod.ru/faq/dialog/dialog001.html
MSDN
Автор: modulo
Дата сообщения: 25.01.2005 12:19
ZZmiy


Код: SelectDirectory(Directory,[sdAllowCreate, sdPerformCreate],0);
Автор: EZH
Дата сообщения: 25.01.2005 12:35
modulo
Дык ёлы палы, это же синтаксис Delphi!

В билдере пиши TSelectDirOpts() << sdAllowCreate << sdPerformCreate
Автор: modulo
Дата сообщения: 25.01.2005 13:15
вот отстой
а нахер они хелп перемешали!?
Автор: EZH
Дата сообщения: 25.01.2005 14:25
modulo
Потому что С++Builder компилит и Delphi исходники (компоненты VCL то в основном на Delphi ваяют).
Автор: nobody2
Дата сообщения: 27.01.2005 11:25
Да уж скорей кусок рынка у микрософт хотели отхряпать.
Автор: EZH
Дата сообщения: 27.01.2005 14:58
nobody2
В смысле?
Автор: tomegadeth
Дата сообщения: 06.02.2005 11:22
Кто знает, кат изменить дефолтовую директорию проектов
(как всегда "Program Files\Borland\CBuilder6\Projects") на свою,
типа D:\Projects?
Автор: nobody2
Дата сообщения: 07.02.2005 11:31
EZH
Ну что тут не понятно?

Изначально проект быстрого визуального проектирования приложений был на паскале. И конкурировал, в основном, с вижуал басиком. По понятным причинам различным профи и другим снобам не катило писать в такой IDE и переходить с СИ++ на Паскаль.
И они использовали MSVC, число пользователей которой заставляло людей из Борданда кусать локти и нервно курить в коридоре. И тут пришло озарение: скрестить бульдога с носорогом (Паскаль и С++), чтоб досталось и вашим и нашим. Взяли компилятор от Borland C++ (кто помнит OWL) и успешную библиотеку VCL и действительно визуальную IDE от дельфей, заменили back-end паскалевский компиллер, чтоб генерил объектники omf и назвали все Borland С++Builder.

Хелп взяли дельфовый, большинство описаний переделали для билдера, процентов 10 забыли. Апишный хелп (довольно древний) взяли от микрософта. Вся хелповая система настолько глючная, что использовать все вместе в IDE (через oh.exe) просто не возможно. Для сравнения возьмите хелп, поставляемый с MSVC.

То же самое со сторонними библиотеками (типа ATL, версию 3.0 которой - столетней давности, к тому же без bug fix'ов - поставляют даже в С++BulderX).

Обычные, простые программки (несложный GUI) пишутся на ура. А что надо делать для нестандартных запросов, хорошо описано в http://www.softcraft.ru/coding/winapi/mfcbad.shtml, только замените MFC на VCL.
Автор: modulo
Дата сообщения: 08.02.2005 07:41
у меня снова бредовые проекты:
мне надо сделать прогу разбиения файлов на части и естественно сборки обратно (чтоб лишних деталей не осталось), а что самое главное, надо чтобы файл после этого не пострадал. я вообще-то мало представляю как это все реализовать, может у кого есть похожий код, я разберусь
Автор: nobody2
Дата сообщения: 09.02.2005 11:23
Типа Split/Combine в TotalCommander?
Автор: modulo
Дата сообщения: 09.02.2005 12:43
nobody2
ага
идея у меня такая - в первом файле в начале записать количество частей, вот только вообще не представляю как если загрузить содержимое файла в какую-то переменную, тот как потом её делить...
я интерфейс-то уже сделал, дошёл до самого главного - разбираюсь с fopen, может кто посоветует какими функциями лучше попользоваться?
Автор: SashKa
Дата сообщения: 10.02.2005 13:59
предлагаю так.
В интерфейсе запрашивается число частей (или разер части, что еще проще) и понеслись:

Открываем исходный файл в двоичном режиме и читаем его по байтикам(байтики считаем)
Открываем новый файл на запись. даем ему скажем расширение p00. И пишем туда байты из первго файла. Как только достигнут размер части, то закрываем файл p00 и создаем файл p01 скажем. Если достигнут конец исходного файла то заканчиваем запсись.
Можно даже формировать имя файла не отбрасывая исходное расширение а просто дописывая .p** Тогда ничего в первый файл дописывать не надо(число частей и все такое) Число частей вычисляется путем сканирования каталога и подсчетом частей существующих.

Ну а объединить части можно в обратном порядке.

Вот пример split

ifstream srcfile;
srcfile.open("src.src",ios::in|ios::binary);
int cntr;
char bytic;
ofstream dstfile;
dstfile.open("src.src.p00",ios::out|ios::binary);
while(1){
srcfile.read(&bytic,1);
if(srcfile.eof()) {dstfile.close(); break};
cntr++;
if(cntr==PartSize) {
dstfile.close();
dstfile.open("src.src.p01",ios::out|ios::binary);
cntr=0;
}
dstfile.write(&bytic,1);
};

srcfile.close();

где "src.src" - имя и расширение исходно файла
Здесь только не генерируется новое имя файла новой части, но это лего сделать. (т.е. максимум две части)


Добавлено:
Да, еще забыл сказать что здесь использовались стандартные i/o классы C++
header <iostream.h> и <fstream.h> - ну это для тех кто не знает
Автор: modulo
Дата сообщения: 11.02.2005 07:50
попробую
Автор: nobody2
Дата сообщения: 11.02.2005 11:14
Названия частей, их количество и контрольную сумму лучше хранить в отдельном файле (как в TC).
Автор: modulo
Дата сообщения: 14.02.2005 07:47
SashKa
а нельзя такое провернуть, используя
FILE* Source = fopen("src.src",r) - исходный файл,
FILE* Part =fopen("src.src",w) - часть для записи,
Part=fread(Source,количество байт) - это не сработает?
и можно будет как-нибудь сделать чё-нибудь типа:
int* pointer; - указать в нем количество частей
а потом
Part=pointer+fread(Source,количество байт); - это сработает?
Автор: Prizrak7
Дата сообщения: 14.02.2005 18:00
modulo

Откровенно говоря, я думаю что за копирование файла побайтно (см. код SashKa) ваш компьютер подаст на вас жалобу в ООН - за жестокое обращение с животными. Копируйте буферами (размер можете установить экспериментально, но в общем случае - увлекаться не стоит). Можете попробовать использовать функции чтения/записи Win32 API (см. хелп), при определенном раскладе это может дать некоторую прибавку в скорости. В любом случае не забывайте проверять значения которые функции (и операторы, например в случае "старого" new ) возвращают и реагировать соответственно.
Автор: modulo
Дата сообщения: 15.02.2005 08:03
Prizrak7
может подкините названия функций, чтоб я знал про что читать

Страницы: 12345678910111213141516171819202122232425262728

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


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