Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 198 199 200 [ 201 ] 202 203 204 ... 210


SysFreeMem( mem ); return Result;

Если список классов, которые надо создавать по имени, не очень велик, то можно так:

TControl* CreateControlByName(AnsiString ClassName, TComponent *Owner)

TMetaClass *c=GetClass(ClassName); if(c==NULL)

throw Exception( Unregistered class. );

if(c== classid(TButton)) return new TButton(Owner);

if(c== classid(TEdit)) return new TEdit(Owner);

return NULL;

Почему функция isdigit (да и остальные is*) возвращает некорректные значения для аргумента в виде русской буквы?

Напиши #undef isdigit, будет вызываться функция с

правильным кастингом.

Почему при сборке в CB3 с включенным Build With Runtime Packages все работает, а если отключить, то вылетает с ошибкой, не доходя до Application->Initialize()?

В IDE есть глючек, в результате которого порядок .lib в

строке LIBRARIES .bpr-файла оказывается неправильным

(первым обязательно должен идти vcl35.lib). Из-за этого

нарушается порядок инициализации модулей и глобальных

VCL-объектов. В результате при запуске программы имеем

стабильный Access Violation. Для его устранения необходимо

поправить строку ALLLIB .bpr-файла:

ALLLIB = vcl35.lib $(LIBFILES) $(LIBRARIES) import32.lib

cp32mt.lib

Есть функция, которая производит длительные вычисления в цикле. Хотелось бы иметь возможность ее прервать. Естественно, что пока вычисления не выходят из цикла никакие контролы не работают...

Вставить в цикл, в котором происходят вычисления, вызов

Application->ProcessMessages(); Т.е.:

for(.....



здесь выполняются вычисления Application->ProcessMessages();

Также вынести вычисления в отдельный thread.

Я переписываю BDE-приложение на другой компьютер, а оно отказывается работать. Что делать?

1. Использовать инсталляционный пакет, например InstallShield или Wise.

2. Не использовать его. В этом случае нет универсального решения.

Оно будет варьироваться в зависимости от использования BDE в локальном или серверном режиме, для доступа к Paradox- или DBF-таблицам, использования локального SQL, версии BDE, и так далее... Здесь приведен пример для наиболее общего варианта - пятая версия BDE, локальные таблицы, без использования локального SQL, стандартная кодировка ANSI.

Нужно добавить следующие файлы из папки BDE к вашему исполняемому модулю: blw32.dll, idapi32.dll, idr20009.dll, idpdx32.dll для Paradox-таблиц или iddbas32.dll для DBF-таблиц, bantam.dll, charset.cvb, usa.btl.

Доступ к таблицам надо настроить не через псевдонимы (aliasы), а через пути в файловой системе. В идеале все таблицы храните в папке программы, тогда нужно только указать имя таблицы без пути.

Приготовленный таким образом дистрибутив запускается на любой машине без необходимости инсталляции BDE, максимально устойчив и нечувствителен к смене имен папок/переинсталляции системы/порчи реестра/влиянии на другие BDE-приложения. Добавка к основному модулю составляет дя этих семи dll-библиотек ~1030 КБ, после упаковки ~470 КБ.

Для того, чтобы установить программу, которая требует BDE, есть несколько базовых путей, в частности:

1. Создать полноценную программу инсталляции с помощью продуктов Install Shield, Wise или подобных. Указанные продукты используются чаще всего и оба позволяют включить в инсталляцию BDE + базовые настройки (алиасы и пути).



2. Для разных целей можно сделать инсталляцию BDE отдельным пакетом (в Insta11 Shie1dе это делается более чем элементарно - в проект не надо добавлять ничего, кроме поддержки BDE). Удобно в процессе написания программы для одного пользователя. Первый раз устанавливаешь и настраиваешь BDE, а затем носишь только новые версии программ. Так же можно при установке Дельфи/Билдеpа с компашки снять флажки отовсюду кроме BDE - в этом случае будет установлена только

BDE.

3. Есть возможность инсталлировать BDE ручками. Первый этап - копирование файлов, второй - прописывание реестра.

Теперь к вопросу о том, почему установка BDE - это не просто прописать одну опцию в проекте.

Дело в том, что BDE - это не просто несколько библиотек динамического доступа (DLL), это - целый engine, достаточно хорошо продуманный для того, чтобы быть и универсальным и расширяемым. Занимает он в запакованном виде две дискеты, а в распакованном (+ файлы, которые включать в поставку не нужно) - более десяти!

Естественно, не для всех задач подходит именно BDE (благодаря своим особенностям). Во-первых, возникают проблемы при работе с DBF форматов C1ipper и Fox. Во-вторых, не для всех программ требуются все возможности BDE, а быть они должны как можно меньше.

Как из Buildera можно работать с последовательными портами?

Существует компонент ZComm (free for persona1 use), поддерживает все порты, все скорости, hard/soft flow control, in/out

буферизацию. Передача/прием данных вынесены в отдельную нитку.

Еще один вариант:

fastcall TComPort::TComPort(TComponent* Owner) : TComponent(Owner)

OverlappedStructure.Offset = 0; OverlappedStructure.OffsetHigh = 0; OverlappedStructure.hEvent = 0; iComNumber = 2; iBaudRate = 9600;



1 ... 198 199 200 [ 201 ] 202 203 204 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика