Indy-Komponente bei DosFenster
-
Hi ich habe bisher die Komponente IdHttp des Indy-Packages verwendet... jetzt will ich mein Programm erstmal als "konsolen-experte",sprich DosFenster-Anwendung schreiben. Bei der Form konnte ich ja die Komponente einfach auf die Form ziehen und sogleich verwenden...
Doch wie muss ich das jetzt machen?? Hab ja keine Form mehr...
Hab versucht eine *.h Datei zu schreiben und dann einzubinden hat aber leider nicht so gut funktionniert, hiermal mein Quellcode://--------------------------------------------------------------------------- #include <vcl.h> #include <File1.h> <------ selber entworfen #pragma hdrstop #include <iostream.h> #include <fstream> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { IdHTTP1->HandleRedirects=true; String Quelltext = IdHTTP1->Get("http://www.google.de"); system("PAUSE"); return 0; } //---------------------------------------------------------------------------hier mal die Datei File1.h:
#ifndef File1H #define File1H #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <IdBaseComponent.hpp> #include <IdComponent.hpp> #include <IdHTTP.hpp> #include <IdTCPClient.hpp> #include <IdTCPConnection.hpp> #include <Grids.hpp> TIdHTTP *IdHTTP1; #endifLeider bekomme ich keine konkrete Fehlermeldung sondern eine "Benachrichtigung über Debugger-Exception"...
Wie kann ich die TIdHttp-Komponente bei dem Dos-Fenster verwenden bzw wie könnte ich den Timer verwenden(falls ihr das Indy-Package nicht installiert habt)
MfG Straightflush
-
Hallo
die Exception kommt, weil du für die Indy-Kompo keine gültige Instanz erstellt hast.
int main(int argc, char* argv[])
{
IdHTTP1 = new TIdHTTP(NULL); // Instanz erstellen
IdHTTP1->HandleRedirects=true;
String Quelltext = IdHTTP1->Get("http://www.google.de");
system("PAUSE");
delete IdHTTP1; // nach gebrauch löschen
return 0;
}Noch Anmerkungen :
- globale Variablen sind schlecht. Verwende lokale Variablen
- system ist schlecht. Schau in die Konsolen-FAQ, den Thread Automatisches Schließen verhindern
- Verwende sinnvollere Variablennamen als IdHTTP1bis bald
akari
-
IdHTTP1 wurde halt automatisch von Borland erstellt...
und system war halt die einzige Lösung die mir so auf die schnelle eingefallen is
-
und wie füg ich die komponente jetzt ein???
//--------------------------------------------------------------------------- #include <vcl.h> #include <fstream> #include <iostream> #pragma hdrstop TIdHTTP *IdHTTP1; //--------------------------------------------------------------------------- using namespace std; #pragma argsused int main(int argc, char* argv[]) { return 0; } //---------------------------------------------------------------------------so gehts net

muss ich des über Komponente->Neue Komponente machen???
da wird aber eine komplette *.cpp erzeugt??Gibts da irgendwo ne Anleitung wie man Komponenten einfügt? Hab leider garkeine Erfahrung damit...
MfG Straightflush
-
Hallo
nein, dafür gibt es weder ein Tutorial noch eine Menüoption.
Diese Komponentenerzeugen geht nur in VCL-Anwendungen mit dem Objektinspektor.
Wenn du ein Konsolenprogramm schreibst, must du alles manuell schreiben. Und zwar nach dem Prinzip das ich dir schon gezeigt habe.bis bald
akari
-
was meinst du mit "gezeigt"??
int main(int argc, char* argv[]) { IdHTTP1 = new TIdHTTP(NULL); // Instanz erstellen IdHTTP1->HandleRedirects=true; String Quelltext = IdHTTP1->Get("http://www.google.de"); system("PAUSE"); delete IdHTTP1; // nach gebrauch löschen return 0; }das hier??
MfG Straightflush
-
Hallo
genau. Sowird nach dem C++ Standard eine dynamische Instanz einer Klasse erstellt und gelöscht.
bis bald
akari
-
da bekomme ich aber die Meldung "undefiniertes Symbol 'IdHTTP1'"
-
Hallo
du must natürlich noch den Pointer deklarieren.
Ich hatte es nicht in meinen Code augenommen, weil dazu eh dein Block mit den Inkludes und eben der Deklaration dazugehört. Also jetzt noch mal zusammen#include <vcl.h> #include <fstream> #include <iostream> #pragma hdrstop int main(int argc, char* argv[]) { TIdHTTP *IdHTTP1 = new TIdHTTP(NULL); // Pointer deklarieren und Instanz erstellen IdHTTP1->HandleRedirects=true; String Quelltext = IdHTTP1->Get("http://www.google.de"); system("PAUSE"); delete IdHTTP1; // nach gebrauch löschen return 0; }bis bald
akari
-
ne sry so klappts auch net... bekomme die meldung immernoch
-
Hallo
es fehlen noch diese Includes
#include "IdBaseComponent.hpp" #include "IdComponent.hpp" #include "IdHTTP.hpp" #include "IdTCPClient.hpp" #include "IdTCPConnection.hpp"Desweiteren must du noch schauen, das in den Projektoptionen/Verzeichnisse und Bedingungen sowohl bei den Include- als auch Library-Paths dein Indy-Verzeichnis dabei ist. (und wenn nicht, nachtragen)
bis bald
akari