Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Indy u Turbo C++u

[es] :: C/C++ programiranje :: Indy u Turbo C++u

[ Pregleda: 3283 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Indy u Turbo C++u15.09.2006. u 08:13 - pre 214 meseci
Sinoć sam zamalo uspio natjerati Indy komponente da rade u Turbo C++u. Zapravo, nije mi ni jasno zašto ne radi?

Naime, u BCB6 sam napravio LIB u koji sam stavio formu na kojoj se nalaze Indy komponente. Test aplikacija koja koristi LIB dinamički alocira tu formu i preko tog pointera test aplikacija se koristi Indy komponentama. Stvar je u tome što to bez ikakvih problema radi na BCB6. Kada se ista test aplikacija compajlira u Turbo C++u onda za svaku funkciju članicu bilo koje Indy komponente javi grešku;

unresolved extrenal....

E sad... zašto to uspješno radi u BCB6 a zašto ne u Turbo C++u???

Pokušao sam i sa DLL-om (statičkim povezivanjem) no tad me već u startu sreže jer mi neda da u test aplikaciji dinamički alociram instancu nikakve VCL klase koja se nalazi u Dllu. Tada sam stavio da se memorija alocira u Dll-u i exportirao funkciju koja vraća pokazivač na taj alocirani prostor. Ipak, ni tad testna aplikacija neće da radi dobro jer opet javlja unresolved external...

Ideje?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u15.09.2006. u 16:33 - pre 214 meseci
Verovatno ti fali indy.bpi u listi prikljucenih paketa.

Otvori bdsproj file u nekom editory i u
<property category="build.node" name="packages" value="paketi"/>

dodaj indy



Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u18.09.2006. u 08:46 - pre 214 meseci
Citat:
kiklop74: Verovatno ti fali indy.bpi u listi prikljucenih paketa.

Otvori bdsproj file u nekom editory i u
<property category="build.node" name="packages" value="paketi"/>

dodaj indy
To ne mogu unutar Turbo C++a, a u BCBu sam to već napravio. Čak sam i sve spremio u dll tako da sam isključio korištenje runtime paketa i rtl-a...
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u18.09.2006. u 13:33 - pre 214 meseci
Citat:
itf: To ne mogu unutar Turbo C++a, a u BCBu sam to već napravio. Čak sam i sve spremio u dll tako da sam isključio korištenje runtime paketa i rtl-a...


Pa znam da ne moze zato sam i rekao "otvori bdsproj u nekom editoru". Dakle notepad, ultraedit, wordpad bilo sta.


Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u18.09.2006. u 13:48 - pre 214 meseci
Sad sam na poslu pa ću večeras probati, no sumnjam da su tako glupi da bi to dopustili... Pokušat ću i zamjeniti neke od već postojećih paketa sa indy.bpl-om.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u18.09.2006. u 14:25 - pre 214 meseci
Citat:
itf: Sad sam na poslu pa ću večeras probati, no sumnjam da su tako glupi da bi to dopustili... Pokušat ću i zamjeniti neke od već postojećih paketa sa indy.bpl-om.


A sto da ne moze? bdsproj je najobicniji xml fajl i mozes da ga menjas kako hoces u bilo kom tekstualnom editoru.

Ako imas rezerve prema rucnom editovanju jednostavno stavi bilo koji indy komponentu na formu tvoje aplikacije i indy.bpi ce biti automatski dodat u projektni fajl.


Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 08:05 - pre 214 meseci
Ja govorim sad o Turbo C++u (Explorer). Ne mogu tamo staviti nikakvu Indy komponentu na formu ili sl..
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 11:08 - pre 214 meseci
Citat:
itf: Ja govorim sad o Turbo C++u (Explorer). Ne mogu tamo staviti nikakvu Indy komponentu na formu ili sl..


??????

Onda nesto kod tebe nije u redu. Probao na dve masine i bez ikakvog problema mogu da dodam bilo koju indy kontrolu na formu.


Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 11:17 - pre 214 meseci
Pa Turbo Explorer C++ NEMA Indy komponente, ZAR NE? Kako da ju onda stavim na formu? Hoćeš reći da na onaj način editiram projekt datoteku i da će mi se u tool paleti pojaviti Indy komponente?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 13:39 - pre 214 meseci
Ovo je bas cudno. Prekjuche sam napravio projekat i stavio indy kontrolu na formu (kontrole su bile prikazane na paleti). Juce sam instalirao onaj update i danas (po prvi put) turbo c++ mi kaze da ne moze da koristi third-party komponente...

U svakom slucaju nije sve izgubljeno. Turbo C++ express te sprecava da koristis third-party kontrole u dizajn modu - dakle ne mozes da ih dodas na paletu ili na formu direktno ali ono sto mozes je da kreiras komponente dinamicki. Indy je ionako vec instaliran u <BDS>\include\Indy<9/10>

Na primer kako dodati Indy telnet komponentu dinamicki:

1. U header forme dodati sledece includove:
Code:
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include <IdTelnet.hpp>


2. u private deo form klase dodati clan TIdTelnet* kao ovde:
Code:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton   *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
    TIdTelnet *myTelnet; //mora ovde a ne u published
    void __fastcall OnDataAvailable(TIdTelnet* Sender, const AnsiString Buffer); //jedan event handler
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};


3. Na kraju u konstruktoru inicijalizovati komponentu:
Code:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    myTelnet = new TIdTelnet(this);
    myTelnet->OnDataAvailable = OnDataAvailable; //kacenje event handlera
}



Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 13:53 - pre 214 meseci
Misliš da to već nisam probao? :) Problem je u ovom trećem dijelu - dinamičkoj alokaciji. Ajd probaj dinamički alocirati npr TcpServer komponentu, pa ako uspiješ onda mi javi jer to bi bilo rješenje problema... Meni javlja da konstruktor nije dobro napisan iako znam da sam sve dobro ukucao..
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 14:19 - pre 214 meseci
Meni radi a evo sta sam ja uradio:

1. Kreirao default VCL forms aplikaciju
2. Dodao sledeci include u header:
Code:
#include <Sockets.hpp>

3. Dodao clanicu TTcpSocketServer u form klasu
Code:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
    TTcpServer *myTcpServer;
    void __fastcall OnTcpServerListening(TObject *Sender);
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};

3. I na kraju konstruktor:
Code:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    myTcpServer = new TTcpServer(this);
    myTcpServer->OnListening = OnTcpServerListening;
}



Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 14:25 - pre 214 meseci
Mislio sam na onaj Indy TcpServer... mislim da je klasa IdTcpServer ili već kako... pokušaj je samo dinamički alocirati jer ja ne uspjevam... Hvala
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Indy u Turbo C++u19.09.2006. u 14:44 - pre 214 meseci
Radi i sa indy tcp serverom:

Evo koda u celini da se ne ponavljam previse u kucanju:
Code:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <IdComponent.hpp>
#include <Idtcpserver.hpp>

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
    TIdTCPServer *myTcpServer;
    void __fastcall OnTIdServerConnect(TIdPeerThread* AThread);
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Code:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    myTcpServer = new TIdTCPServer(this);
    myTcpServer->OnConnect = OnTIdServerConnect;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnTIdServerConnect(TIdPeerThread* AThread) {

}

Tko leti vrijedi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: Indy u Turbo C++u20.09.2006. u 07:58 - pre 214 meseci
Da... i meni je sinoć to uspjelo. Naime, ja sam dodao indy paket, ali sam isključio Build with runtime packages... pa je zato stvar štekla...


Evo malog primjera Chat aplikacije pod Turbo C++om koji sam napravio da testiram Indy komponente....

Unit1.h
Code:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdIPWatch.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include <IdTCPServer.hpp>

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TEdit *E1;
    TButton *Button1;
    TListBox *L1;
    TLabel *Label1;
    TEdit *EHost;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    TIdTCPServer* S1;
    TIdTCPClient* C1;
    __fastcall TForm1(TComponent* Owner);
    void __fastcall S1Execute(TIdPeerThread *AThread);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Unit1.cpp
Code:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
void __fastcall TForm1::S1Execute(TIdPeerThread *AThread)
{
    L1->Items->Add(AThread->Connection->ReadString(AThread->Connection->ReadInteger()));
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // Indy TCP server...
    S1 = new TIdTCPServer(this);
    S1->Bindings->Add();
    S1->Bindings->Items[0]->Port = 15000;
    S1->Active = true;
    S1->OnExecute = S1Execute;

    // Indy TCP klijent...
    C1 = new TIdTCPClient(this);
    C1->Port = 15000;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    C1->Host = EHost->Text;
    C1->Connect();
    C1->WriteInteger(E1->Text.Length());
    C1->Write(E1->Text);
    C1->Disconnect();
}
//---------------------------------------------------------------------------


[Ovu poruku je menjao itf dana 20.09.2006. u 10:57 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: Indy u Turbo C++u

[ Pregleda: 3283 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.