Petr |
Отправлено: 08.10.2005, 21:33 |
|
Не зарегистрирован
|
Я недавно стал осваивать программирование в С++Builder.
И встретился с такой проблемой.
При компилировании проекта в EXE- фаил он работает нормально,
но только у меня(т.е. на машине с установленной средой С++Builder)
А на других машинах при запуске программ выдается сообщение,
что не найден фаил vcl60.bpl . Я этот фаил на своей машине нашел он находиться
в папке c:\windows\system32. Как мне скомпилировать мою программу так, чтобы
она ничего больше не требовала. Ну т.е. чтобы был только один исполняемый
фаил?
Заранее благодарен!
|
|
BreakPointMAN |
Отправлено: 08.10.2005, 22:39 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
одни и те же вопросы задаются с завидной периодичностью... Petr, ну загляни ты, в конце концов, в FAQ! 2-ой вопрос твой...
Отредактировано BreakPointMAN — 08/10/2005, 22:41
|
|
Grigoriy |
Отправлено: 14.10.2005, 06:44 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Здравствуйте.
Я новичок на этом форуме, Григорий.
Я хочу, чтобы при выполнении моей программы создавались новые компоненты, например TImage.
Количество экземпляров класса TImage должно зависеть от количества файлов "*.BMP".
Далее — компоненты должны создаваться во время работы программы.
Использование TListView не подходит.
Компилятор пишет -
[C++ Error] Unit1.cpp(24): E2459 VCL style classes must be constructed using operator new
Пробовал использовать оператор new.
CODE |
TImage* ffd;
ffd=new(TImage);
|
Пишет
[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'TImage::TImage()'
Если ответ на мой вопрос уже есть в другой теме, то сообщите, где.
|
|
olegenty |
Отправлено: 14.10.2005, 07:13 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
в книгах по С++
QUOTE |
[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'TImage::TImage()'
|
говорит о том, что не найден конструктор по умолчанию для класса TImage. Увидев такую ошибку, логично залезть в Help и поинтересоваться, а какие вообще есть конструкторы у TImage. И обнаружить, что правильно писать так:
CODE |
TImage *ffd = new TImage(this); // единственный параметр конструктора — класс "владелец", отвечающий за очистку ресурсов при разрушении объектов.
|
|
|
Grigoriy |
Отправлено: 14.10.2005, 08:59 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE |
CODE |
TImage *ffd = new TImage(this); // единственный параметр конструктора — класс "владелец", отвечающий за очистку ресурсов при разрушении объектов.
|
|
Сработало.
Удалось также сделать приведение типов.
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TImage* ffd = new TImage(this);
((TImage)(*ffd)).Parent=Form1;
((TImage)(*ffd)).Height=400;
((TImage)(*ffd)).Left=10;
((TImage)(*ffd)).Top=10;
((TImage)(*ffd)).Width=400;
((TImage)(*ffd)).Picture->LoadFromFile("D:\\888.bmp");
}
|
Я запускал программу и нажимал на Button1.
И действительно все операторы выполнялись.
И загружалось изображение и показывалось.
Все. Спасибо.
|
|
Gedeon |
Отправлено: 14.10.2005, 09:28 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да уж, а через указатель работать идейно не хотим?
ffd->Parent=Form1;
и т.д.
|
|
avc* |
Отправлено: 14.10.2005, 09:30 |
|
Не зарегистрирован
|
QUOTE (Grigoriy @ 14/10/2005, 06:44) |
Я новичок на этом форуме, Григорий.
|
И не только на форуме, но, судя по вопросу и тексту, и в программировании на C.
|
|
Grigoriy |
Отправлено: 14.10.2005, 10:05 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Gedeon @ 14/10/2005, 09:28) | Да уж, а через указатель работать идейно не хотим?
ffd->Parent=Form1;
и т.д. |
Да, пробовали, конечно.
Вот именно, что через указатель с самого начала и пытался вызвать тот метод.
Но неполучилось потому, что указатель описал не в той подпрограмме, в которой пытался использовать потом.
И что удивительно — еще думал, что что-то странно получается работать с указателем. Начал было уже всякими методами обходится.
А потом, когда понял, что указатель за пределами видимости находится и описал его в другой подпрограмме, так уже и забыл, что :
(может все таки попробовать прописать ffd->Parent=Form1 ?).
Спасибо, что напомнили.
Да, на C++ надо привыкнуть. Я только недавно купил книгу Герберта Шилдта по C++. По Builder-у не увидел в магазине.
До этого програмки составлял на Delphi.
А до того на Assembler.
А до того на Borland Pascal 7.0.
А до того на Turbo Pascal 5.5.
|
|
Grigoriy |
Отправлено: 15.10.2005, 10:57 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Подскажите, как использовать опции на закладке Packages, чтобы "*.exe" — файл получился наименьшего размера.
Дело в том, что компилятор может добавлять излишний код в результатирующий файл, а я хочу этого избежать.
Есть группа Design Packages. Но когда я отключаю независимые переключатели в списке, то исчезает окно формы и опустошается окно инспектора объектов.
Если я убираю птички только для того, чтобы эти пакеты не включались в исполняемый файл, то причем тут изменения в интерфейсе среды разработки.
|
|
Grigoriy |
Отправлено: 15.10.2005, 14:54 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Petr @ 08/10/2005, 21:33) |
что не найден фаил vcl60.bpl . Я этот фаил на своей машине нашел он находиться
в папке c:\windows\system32. Как мне скомпилировать мою программу так, чтобы
она ничего больше не требовала. |
Ну я так и не понял, зачем компилятор помещает излишний код в исполняемый файл.
Ну если я не использую методов в стандартных пакетах и не создаю экземпляры например из пакета Borland ADO DB Components, то зачем компилятор помещает машинный код, который содержит все методы всех классов пакета Borland ADO DB Components ?
То же самое и с остальными пакетами.
А если бы ещё больше было Packages, то "*.exe" был бы еще больше только потому, что ненужные пакеты используются в компиляции ?
|
|