1

Тема: Як підключити компонент BCB5 до консольної програми?

Потрібно створити програму без вікна якаб працювала в фоні і робила запрос на вебсторінку. Хочу попробувати це зробити в консолі з компонентами Інді IdHTTP і IdSSLOpenSSL. В Aplication це працює.  Можна булоб і скрити форму но хочеться в консолі.

Створив консольний проект добавив хедер і в ньому написав:

#include "IdComponent.hpp"
#include "IdHTTP.hpp"
#include "IdIOHandler.hpp"
#include "IdIOHandlerSocket.hpp"
#include "IdSSLOpenSSL.hpp"
#include "IdTCPClient.hpp"
#include "IdTCPConnection.hpp"
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TComp
{

private:    // User declarations

public:        // User declarations
        TIdHTTP *IdHTTP1;
        TIdSSLIOHandlerSocket *IdSSLIOHandlerSocket1;

//        __fastcall TComp(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TComp *Comp;
//---------------------------------------------------------------------------
#endif

Тепер у вікні cpp бачу компоненти(підказки) но коли звертаюся до них (наприклад Comp->IdHTTP1->RedirectMaximum = 1;)
При компиляції получаю:
[C++ Error] Unit1.cpp(28): E2015 Ambiguity between 'Comp' and 'System::Comp'

Як мені це зробити?

2 Востаннє редагувалося koala (07.05.2022 20:24:58)

Re: Як підключити компонент BCB5 до консольної програми?

1. BCB5 старший за Windows XP. Ви точно хочете це лайно мамонта колупати?
2. Бібліотека BCB вже містить клас із назвою Comp, на що вам, власне, і вказує компілятор. Назвіть свій клас якось інакше, або хоча б пишіть ::Comp.

Подякували: leofun01, m@rio2

3

Re: Як підключити компонент BCB5 до консольної програми?

Так старий но мені він подобається навіть за те що вихідний файл получається не 4Мб(наприклад XE7) а всйого 300клб.
Та і вистачає мені його...

Змінив назву класа тепер получаю:
[Linker Error] Unresolved external '_Comp1' referenced from D:\C\UNIT1.OBJ

4

Re: Як підключити компонент BCB5 до консольної програми?

Вітаю у світі ручного рефакторінгу автогенерованого коду.
Вам треба виправити назву всюди, а не лише в цьому файлі. Закрема, в файлах, створених середовищем. В новіших білдерах для цього має бути пункт у меню, але не певен, що в такому старому він є.
Ну і ви намагалися запустити ваш 300кБ .exe на компі без встановленого bcb5?

5

Re: Як підключити компонент BCB5 до консольної програми?

Якщо у вас не вистачає навичок, щоб створювати компоненти руками в рантаймі, то можна зробити датамодуль, і накидати потрібних компонент туди.

koala написав:

Ну і ви намагалися запустити ваш 300кБ .exe на компі без встановленого bcb5?

Скоріше за все буде нормально працювати. В старих версіях був такий розмір файлу з прилінкованими бібліотеками.

Подякували: m@rio1

6

Re: Як підключити компонент BCB5 до консольної програми?

Torbins написав:

...то можна зробити датамодуль, і накидати потрібних компонент туди.

Це напевні те що мені потрібно. Не знав що там таке є. Буду дома - попробую.
Хоча цікаво чому компоненти закриті в клас не спрацювали... пробував оголошувати і без класу:

#include "IdComponent.hpp"
#include "IdHTTP.hpp"
#include "IdIOHandler.hpp"
#include "IdIOHandlerSocket.hpp"
#include "IdSSLOpenSSL.hpp"
#include "IdTCPClient.hpp"
#include "IdTCPConnection.hpp"

TIdHTTP *IdHTTP1;
TIdSSLIOHandlerSocket *IdSSLIOHandlerSocket1;

Програма компилюється но не працює. Но десь читав що компонент мусить бути привязаний до класу...

koala написав:

Ну і ви намагалися запустити ваш 300кБ .exe на компі без встановленого bcb5?

Torbins написав:

Скоріше за все буде нормально працювати. В старих версіях був такий розмір файлу з прилінкованими бібліотеками.

Так. Це автономний файл з вмонтованими бібліотеками. Після пакера (наприклад upx) взагалі 150клб займає. Правда не вартує пакувати ато після пакера вірустотал там вже віруси бачить(проте файл чистий) :)
Просто в свій час колись спектрумами бавились і кожен байт був на рахунку. Но це був асамблер, тут на асамблері далеко не заїдиш ще і голову зламати можна... Но щоб програма Hellow world займала 4 метри це для мене занато... хоча я розумію що оболонка xe7 не для того робилася...