C++ Builder 5 - некоторые заметки
На этой странице я хотел опубликовать материалы, которые ранее не видел в сети и которые могут быть полезны другим программистам, использующим продукцию компании Borland. Продукты компании Borland содержат множество недокументированных и слабо документированных возможностей. Большинство из описанного здесь является либо результатом собственного опыта, либо информацией, полученной от друзей и коллег, за что я им очень благодарен.
Инструкция по установке Borland С++ Bulder 5 Enterprise Edition + Update1
Все файлы дистрибутива обязательно должны находиться в корне диска. Если при установке после ввода серийного номера не показывается текст публичной оферты (лицензионного договора), то установка пойдёт неверно. После установки обязательно сразу же перезагрузите компьютер. После перезагрузки запустите Buider и проверьте, что пустой проект нормально компилится. В случае ошибок прочтите readme.txt (как правило, проблемы возникают при регистрации borlndm.dll)и замечания по установке. Если ничего не помогло, пишите мне на электронную почту. Обязательно установите Update1 (у меня он назывался BCB5EntUpdate1.exe) и прочтите список ошибок ниже. C неустановленным Update1 возможны ошибки при обработке класса TMetafile.
Список известных ошибок
На мой взгляд, Borland C++ Builder является неплохим выбором для разработки прикладных программ для Windows. Однако и в нём есть ошибки. Вот список известных мне ошибок и некоторые возможные способы их решения:
1 При ошибке Linker Error LME351 удалить все *.tds и все *.obj из папок, куда они записываются (по умолчанию - папки с файлом .exe), а также все *.#?? из папки Borland. Shared. Данная ошибка появляется, когда файл сс отладочной информацией (.tds) достигает размера 32-36 Мб (ориентировочно). Возникновение ошибки связано с тем, что C++ Builder не удаляет устаревшую информацию из этого файла при повторной компиляции больших проектов, а добавляет ее, "раздувая" и без того большой отладочный файл. В качестве кардинального решения проблемы можно предложить разделить проект на несколько отдельных проектов меньшего размера.
2. При ошибке компиляции проектов, использующих utilcls.h исправить ProgId на Progid. Эта ошибка появляется при первой компиляции после установки программы и связана с ошибкой в исходниках у Borland.
3. Проблемы с WideString.
WideString(w_char* t) - в конструкторе работает.
operator = w_char* t – не работает, т.е присвоение типа WideString ws = L"string" не работает (может вызвать появдение окна асм. кода при нормальном исполнении программы из-под отладчика)
operator = char* t – работает нормально.
Для тех, кто не в курсе, что зачем нужен тип строк WideString. строки бывают однобайтные - тип string, AnsiString, cstring. Аналогично "string" (char*) строки бывают двухбайтовые - тип WideString, BSTR (define на w_char_t*) L"string". Таким образом, например, в COM всегда необходимо использовать либо L"", либо WideString.
4. Отладка .dll в Windows XP. Проблема – не подгружаются точки останова. Решение проблемы - вручную подгружать модуль с точками останова. (Ctrl+Alt+M, далее выбрать модуль и подгрузить точки останова).
Работа с COM в С++ Builder
TVariant производства Borland часто работает неверно в самых разных случаях, поэтому рекомендуется использовать CComVariant от Microsoft.
CComPtr - в конструктор обязательно должен передаваться ненулевой эл. CComQIPtr - в конструктор может передаваться нулевой элемент, т.е он отличвается от CComPtr тем, что сам QuerryInterface'ит эл. таким образом, допустимо CComQIPtr name(object), где object имеет тот же тип, что и name или базовый для new_type.
Некоторые замечания по С++ Builder
Для запуска из командной строки - использовать команду bcb.
Горячие клавиши
- Ctrl+K+{, Ctrl+K+} - переход между скобками, удобно, когда имеешь дело с большими циклами, функццями и т.п.
- Ctrl+K+0 - Ctrl+K+9 - поставить/снять закладку (от 0 до 9)/
- F5 - поставить точку останова.
- F9 - запуск программы.
- Ctrl+F2 - остановить выполнение отлаживаемой программы.
FAQ - собран из ответов на вопросы, которые долго я или мои друзья не могли найти:
Автоматическое дополнение при вводе приводит к значительным замедлениям в работе редактора. Для его отключения снять 1 галочку "Code Completion" на вкладке "Code Insight" в разделе "Tools" -> "Editor Options"
- Для получения скриншота раб. стола нужно сделать следующее.
- 1. GetDesktoWindow - получить Handle рабочего стола.
- 2. GetDC - передать туда полученный Handle и получить DC Перед передачей создать контекст устройства.
- 3. BitBlt function performs a bit-block transfer Bit-blockTransfer - в буфер положить картинку. Все эти функции есть в WindowsSDK Builder.
(C) Алексей Горбачев, 2006
P.S. Попытки компиляции крупных проектов в С++ Builder 6 и старше вызывали столько ошибок, что в итоге было принято решение не переходить на новую версию.
К 2009 г., к сожалению, можно констатировать тот факт, что С++ Builder практически "вышел из игры" и используется в большинстве случаев только для поддержки ранее разработанных проектов.
Версия текста: 1.0.1.0
Дата: 2009-04-24
(С) Алексей Горбачев