# Mit C++ PHP Dateien auslesen



## Lumakrieger (15. August 2006)

*Wie kann ich mit C++ PHP Dateien auslesen?*

Hi!

Vorab erst einmal die Bestätigung, dass ich für eine Antwort meiner Frage schon ziemlich viel gegooglt und auch hier im Forum gesucht habe. Jedoch habe ich nichts richtig brauchbares gefunden.
Ich bin noch ein C++ Einsteiger und wäre über eine Vorlage sehr dankbar.

Ich suche ein C++ Skript, das eine PHP-Datei (z.B. http://www.test.de/server.php?befehl=test) aufruft und den String, den server.php ausgibt, in einer Variable speichert. Die PHP-Datei soll nicht angezeigt werden, sondern wirklich nur ausgelesen und gespeichert werden.
Die PHP-Datei könnte z.B. wie folgt aussehen:


```
<?php if($_REQUEST["befehl"] == "test"){echo "ok";} ?>
```

Ich möchte ein Programm schreiben, was aus Server und Client besteht. Da der Server jedoch anspruchsvoller als der Client wird und da ich PHP im Gegensatz zu C++ einigermaßen gut beherrsche, möchte ich den Serverteil in PHP realisieren. Die Lösung des oben geschilderten Problems ist also von großer Bedeutung für die Kommunikation zwischen Client und Server, welche wiederum essentiell für das Gesamte Programm ist.

Über Vorlagen würde ich mich deshalb sehr freuen und bedanke mich schonmal im Vorraus für Eure Hilfe!

Gruß, lumakrieger


----------



## Kaiser206 (15. August 2006)

Ich kann mir ehrlich gesagt nicht vorstellen das du nichts passendes finden konntest. Ich hatte mal ein ähnliches problem, und , wenn du die Suchfunktion richtig benutzt hättest hättest du auch eine Lösung gefunden.

Schau dir das mal an:


```
HINTERNET hInternet;
        HINTERNET hFile;
        char  Buf[100];
        DWORD ReadSize;
        BOOL  bResult;
        int   nummer = 1;
        char* Befehl[100];    // Hier wird die Ausgegebenen Variablen geschpeichert!


        hInternet = InternetOpen(
            "Beliebige Browserkennung",
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,
            NULL,
            0);

        hFile = InternetOpenUrl(
            hInternet,
            "http://www.beliebige_internetseite.de/datei.php",
            NULL,
            0,
            INTERNET_FLAG_NO_CACHE_WRITE,
            0);

    
        for(;;)
        {
          ReadSize = 1;

          bResult = InternetReadFile(
                hFile,
                Buf,
                1,
                &ReadSize);
            
            if(bResult && (ReadSize == 0))
            break;

            Buf[ReadSize] = '\0';

            if(Buf[0] != '#')
              strcat(befehl[nummer], Buf);
            else
              nummer++;
        }
        InternetCloseHandle(hFile);
        InternetCloseHandle(hInternet);
```

Das ist ein Codeausschnitt aus einem Programm das ich mal geschrieben habe. Da ich mich sehr beeilt habe ist es etwas umständlich geworden, aber hauptsache es funktioniert!
Das Programm ließt mehrere Variablen aus die in die Variable char* Befehl[100]; geschrieben werden. Das PHP-Script muss dazu lediglich VARIABLE1#Variable2#variable3 ausgeben.

Du kannst dann über



```
hFile = InternetOpenUrl(
            hInternet,
            strcat("http://www.beliebige_internetseite.de/datei.php?befehl=",beliebige_variable),
            NULL,
            0,
            INTERNET_FLAG_NO_CACHE_WRITE,
            0);
```

eine oder mehrere Variablen übertragen.

Wie gesagt das ist nicht die effizienteste Lösung, man könnte eventuell was weglassen oder ersetzen.


----------



## Lumakrieger (15. August 2006)

Danke für die Antwort! Ich probiere es gleich mal aus!

Naja, ich hab hier, in Google und auf diversen anderen Seiten gesucht und nichts gefunden. Naja wahrscheinlich weil ich nicht genau wusste, welche Suchbegriffe ich dafür verwenden söllte. Naja im Zweifelsfall im Forum fragen, das ist immernoch am besten


----------



## Lumakrieger (15. August 2006)

Ich hab dazu noch eine Frage:

Was muss ich alles includen, um diese ganzen HINTERNET Funktionen und so benutzen zu können?


----------



## Kaiser206 (15. August 2006)

Also erstmal solltest du dich mit dieser Seite vertraut machen:
http://msdn.microsoft.com/
Den Code den du dort oben siehst habe ich zum größten teil daraus(und den anderen Teil aus dem Forum).

Du müsstest einfach im bereich Visual C++ nach HINTERNET suchen. Dort steht alles was es dazu gibt.

Da der obengenannte Text in ein sehr umfangreiches Programm eingebunden war bin ich mir nicht sicher was alles dazugehörte. Hier mal eine Liste von Dateien die in Frage kommen:


```
#include <Wininet.h>
Die bibliothek Wininet.lib
```

EDIT: auf msdn.microsoft.com steht sehr viel zu den Funktionen! Es gibt SEHR viele Optionen, deshalb solltest du dort mal nachschlagen. Ich habe in meiner Funktion zumbeispiel den Cache deaktiviert(INTERNET_FLAG_NO_CACHE_WRITE). D.h. das die seite immer neugeladen wird. Andernfalls würde immer die selbe seite kommen ganz gleich ob du den PHP-Script änderst oder nicht.


----------



## Lumakrieger (16. August 2006)

Mhh, irgendwie kann ich die ganzen Infos bei http://msdn.microsoft.com/ nicht finden. Auch die Suchfunktion hat dort nichts gebracht.

Naja nun zu einem weiteren Problem (ständig stoße ich auf unnötige Fehler in meinem C++ Programm und hab nun schon auf sehr vieles verzichtet):

Hab jetzt mein Clienten soweit fertig, jedoch bleiben im Endspurt noch folgende Fehlermeldungen, wenn ich mein Programm kompilieren möchte:

  [Linker error] undefined reference to `InternetOpenA@20' 
  [Linker error] undefined reference to `InternetOpenUrlA@24' 
  [Linker error] undefined reference to `InternetReadFile@16' 
  [Linker error] undefined reference to `InternetCloseHandle@4' 
  [Linker error] undefined reference to `InternetCloseHandle@4' 

(Compiler ist: Dev-C++)

Hier nochmal den Ausschnitt:


```
string senden(char* eingabe)
{
string console="";
HINTERNET hInternet;
HINTERNET hFile;
char  Buf[100];
DWORD ReadSize;
BOOL  bResult;
int   nummer = 1;
char* befehl[100];

hInternet = InternetOpen("Beliebige Browserkennung",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
hFile = InternetOpenUrl(hInternet,eingabe,NULL,0,INTERNET_FLAG_NO_CACHE_WRITE,0);
for(;;){
ReadSize = 1;
bResult = InternetReadFile(hFile,Buf,1,&ReadSize);
if(bResult && (ReadSize == 0))
break;
Buf[ReadSize] = '\0';
if(Buf[0] != '#')
strcat(befehl[nummer], Buf);
else
nummer++;
}
InternetCloseHandle(hFile);
InternetCloseHandle(hInternet);
```

Wer kann mir helfen? Wieso geht das nicht?
Danke im Vorraus für Eure Hilfe!

Gruß, lumakrieger


----------



## Kaiser206 (16. August 2006)

Also mal sehen.

In deiner Funktion finde ich keinen Fehler. Ich habe sie auf meinem PC mit dem selben Compiler wie deinen Compiliert und alles geht.

Wenn du die obengenannten Fehlermeldungen bekommst heißt das, das du die datei wininet.lib nicht eingebunden hast. Wenn ich sie nicht einbinde kommen bei mir die selben Fehler raus wie bei dir.

PS: Also bei Msdn.microsoft.com gibts eigendlich alles:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopen.asp
Auf der Linken Seite im Index sind auch die Restlichen Funktionen zu sehen die im oberem Programm verwendet wurden. Dort steht auch was man dazu einbinden muss. Eben wininet.lib


----------



## deepthroat (16. August 2006)

Hi.

Wenn du Fehler vom Linker über nicht-definierte Referenzen bekommst von Funktionen die du nicht selbst geschrieben hast, bedeutet das meistens das du vergessen hast eine Bibliothek anzugeben in der diese Funktionen enthalten sind.

Für die InternetOpenUrl Funktion benötigt man laut MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopenurl.asp) die wininet Bibliothek. Diese mußt du in den Projektoptionen als Linker Parameter eintragen. Die Bibliothek befindet sich unterhalb des Dev-Cpp Verzeichnisses im lib\ Unterverzeichnis und heißt libwininet.a.

Gruß


----------



## Lumakrieger (16. August 2006)

Ah super, danke! Könnte ihr mir grad noch den Befehl sagen wie diese Bibliothek include, hab die üblichen Varianten probiert, die gehen nicht! Bin halt noch ein !


----------



## Kaiser206 (16. August 2006)

Also ich weiß auch nicht wie du eine Bibliothek über den Quelltext aus includest.
Ich weiß nur das man es bei den Link-Parametern dazuschreiben muss:

```
cl programm.cpp user32.lib wininet32.lib
```
Bei deiner Programmierumgebung sollte das glaube ich so gehen:
  Project->Settings->Link
Und dann bei
  "Object/Library Modules"
einfach wininet.lib dazuschreiben.

Bei anderen Programmierumgebungen geht das meißtens mit "zum Projekt hinzufügen"

EDIT:


----------



## Lumakrieger (16. August 2006)

Mhh anscheinend geht's nun. Vielen vielen Dank!  Ich schreibe hier wieder, wenn dann doch noch was buggt.

Lol, oben in meinem Post wurde wohl "das andere Wort für Neuling" zensiert^^


----------



## Lumakrieger (16. August 2006)

Mhh, okay des Programm läuft. Aber anstatt das auszugeben, was die PHP Seite sagt, scheint es mir, dass das Programm einfach stoppt. Den es geht auf einmal nicht weiter


----------



## yan1 (16. August 2006)

Das ist meistens wenn es keinen nichts vom InputStream lesen kann.

Am besten selber machen so eine HTTP Abfrage *g*


Socket Verbindung zu www.test.de auf Port 80 erstellen
Den String: "GET /server.php&befehl=test HTTP/1.1\r\nHOST: www.test.de\r\n\r\n" senden
Header einlesen (bis zur ersten Leerzeile
Content (der rest) einlesen und ausgeben
Lg, Yanick


----------



## Kaiser206 (16. August 2006)

Ich arbeite mit der oben genannten Funktion schon recht lange und habe sie erst gestern wieder benutzt. Bei mir gabs nie Schwierigkeiten.

Du solltest Folgendes beachten:

-Die Homepage MUSS mit "http://" eingeleitet werden (z.B. http://homepage.de/datei.php)
-Die Internetverbindung muss bestehen
-Achte auf korrekte Rechtschreibung, ansonsten könnte die Adresse nicht gefunden werden
-Die oben genannte Funktion kann nur folgendes auswerten:

```
VARIABLE1#Variable2#Variable3
```
so könnte das aussehen:

```
12345#313#235#6345#2435#76345#2634#2346#346#dfgdf#dfg
```
Befehl[1] = "12345";
Befehl[2] = "313";
Es muss aber nicht unbedingt "#" sein. Das bleibt dem Programmierer überlassen. Man könnte ja auch das erste Zeichen der  Scriptausgabe dafür verwenden. Damit wäre das Programm dann einiges komfortabler:


```
char Buf2;
ReadSize = 1;
bResult = InternetReadFile(hFile,Buf2,1,&ReadSize);

for(;;){
ReadSize = 1;
bResult = InternetReadFile(hFile,Buf,1,&ReadSize);
if(bResult && (ReadSize == 0))
break;
Buf[ReadSize] = '\0';
if(Buf[0] != Buf2)
strcat(befehl[nummer], Buf);
else
nummer++;
}
```

Was genau tut das Programm denn?
Wenn es sich beendet, heißt es dass es die Internetseite nicht finden konnte
Wenn es hängen bleibt liegts an der auswertung.

Mach doch mal mehrere MessageBoxen in das Programm rein, um zu sehen was denn schief geht und wähle die URL mal mir deinem Browser an. Meistens liegt es daran, das manche Webanbietet einfach mal unsichtbare Werbung in die ersten Zeilen aller Scripte einfügen. Bei mir war das einmal der Fehler. Schau dir mal den Quelltext über den Browser an!

PS: Meintest du N0Ob?


----------



## Lumakrieger (16. August 2006)

Kannst du mir das mal vielleicht in einem Quellcode deine Methode zeigen?
Angenommen meine php-Datei gibt aus: test123
Wie würde da der Quellcode vom Socket-Verbindung herstellen bis zum cout << ausgabe;
ausgabe soll dann "test123" ausgeben

Das wäre sehr nett und ich mache nicht wieder 1000 Fehler^^

EDIT: Ah N0Ob, genau^^ Wart ich guck mal nach der Werbung. Messageboxen werden net angezeigt, des heisst wohl es liegt ganz oben der Fehler!


----------



## Kaiser206 (16. August 2006)

So,
das habe ich aus meinem Programm ausgeschnitten. Es geht einwandfrei. Allerdings lauten meine Ausgaben immer "Variable1#variable2#variab......."
Wenn du immer nur eine Variable übergeben willst kannst du auch die if-schleife streichen. Dann wird nur eine Variable angenommen.


```
void Web()
    {
	HINTERNET hInternet;
        HINTERNET hFile;
        char  Buf[100];
        DWORD ReadSize;
        BOOL  bResult;
	int   nummer = 1;


        hInternet = InternetOpen(
            "TestclientNR.12342",
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,
            NULL,
            0);

        hFile = InternetOpenUrl(
            hInternet,
            "http://adresse.de/datei.php",
            NULL,
            0,
            INTERNET_FLAG_NO_CACHE_WRITE,
            0);

    
        for(;;)
		{
			ReadSize = 1;

            bResult = InternetReadFile(
                hFile,
                Buf,
                1,
                &ReadSize);
            
            if(bResult && (ReadSize == 0))
				break;

            Buf[ReadSize] = '\0';

			if(Buf[0] != '#')
				strcat(befehl[nummer], Buf);
			else
				nummer++;
        }
        
        InternetCloseHandle(hFile);
        InternetCloseHandle(hInternet);



				if(strcmp(befehl[1], "anzeigen") == 0)
				{
				alert(befehl[2],befehl[3]);  // meine eigene selbst programmierte funktion!
				}
	}
```


----------



## Lumakrieger (16. August 2006)

Okay, habs nochma neu gemacht. Dein Programm geht! Nur leider passiert nichts. Kann es sein, dass er die Daten einfach nicht runterlädt?


----------



## Kaiser206 (17. August 2006)

Versuchs mal so:
Mache überall MessageBoxen rein, nach jedem Schritt. Dann weißt du genau was schief läuft.

Mach mal eine einfache textdatei und schreibe in sie 

```
anzeigen#abc#123
```
Dann benutze mal meine 2 Funktion. Es sollte gehen. (Bei mir gehts).


----------



## Lumakrieger (17. August 2006)

Okay, ich habe zwischen durch Lebenszeichen eingebaut. Das Ergebnis war, dass das Programm vor der If-else Schleife aufgehört haben muss.


```
// letztes Lebenszeichen
if(Buf[0] != '#'){
strcat(befehl[nummer], Buf);
// kein Lebenszeichen mehr
}else{
nummer++;
// kein Lebenszeichen mehr
}
```

Diesmal ist auch die Firewall angesprungen, ich hab dem Programm freien Internetzugang genehmigt. Also eine Verbindung will das Programm auf jeden Fall herstellen 
Desweiteren war neu, dass das Programm diesmal mit einer Fehlermeldung abgebrochen ist und danach auch beendet wurde. In der Fehlermeldung stand irgendein wirres Zeug mit Speicherfehler usw. Der übliche Hex-Code Wirrwar. Auch besagte die Fehlermeldung, dass die Funktion "read" nicht ausgeführt werden konnte. Ich teste jetzt mal den unteren Teil offline bei einer Textdatei, wie von dir vorgeschlagen.

Gruß, lumakrieger


----------



## Kaiser206 (17. August 2006)

Schau dir mal die Datei im Anhang an!
 Vielleicht hilft sie dir ja weiter...

Du must dann einen Parameter über die Dosshell übergeben z.B:

programm.exe http://adresse.de/datei.php


----------



## Lumakrieger (17. August 2006)

Wie übergeb ich die Parameter über die Dosshell? Kann man das auch so machen, dass dein Programm in eine andere Funktion kommt und die Main diese Funktion aufruft mit der URL als Parameter? Wenn ja, wie würde dann der Quellcode aussehen? Bei mir gibts als Fehler, ich komm mit den Datentypen in C++ noch nicht so klar. Ich blick da kaum durch!


----------



## Kaiser206 (17. August 2006)

Lumakrieger hat gesagt.:
			
		

> Wie übergeb ich die Parameter über die Dosshell?


!? LOL google: )


			
				Lumakrieger hat gesagt.:
			
		

> Kann man das auch so machen, dass dein Programm in eine andere Funktion kommt und die Main diese Funktion aufruft mit der URL als Parameter?


NEIN! Stell dir mal vor es geht nicht


			
				Lumakrieger hat gesagt.:
			
		

> Wenn ja, wie würde dann der Quellcode aussehen?


Was für ein Programm soll ich entwickeln?
Wie stehts mit meiner Bezahlung?


			
				Lumakrieger hat gesagt.:
			
		

> Bei mir gibts als Fehler, ich komm mit den Datentypen in C++ noch nicht so klar. Ich blick da kaum durch!


Das glaube ich dir... 

Und nun zum eigendlichen Problem:

Du willst also folgende Funktion haben:

```
char* download(char* URL),
```

Ich habe hier eine nützliche funktion geschrieben und getestet:


```
char* download(char* URL)
{ 
  #include <windows.h>
  #include <Wininet.h>
  #include <iostream>
  char output[10000]; //die maximale größe der HTML-Datei(Sehr wichtig!)
  HINTERNET hInternet;
  HINTERNET hFile;
  char  Buf[100];
  DWORD ReadSize;
  BOOL  bResult;
  int   nummer = 1;

  hInternet = InternetOpen(
            "Eine beliebige Browserkennung",
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,
            NULL,
            0);

  hFile = InternetOpenUrl(
            hInternet,
            URL,
            NULL,
            0,
            INTERNET_FLAG_NO_CACHE_WRITE,
            0);

  for(;;)
  {
    ReadSize = 1;
    bResult = InternetReadFile(
            hFile,
            Buf,
            1,
            &ReadSize);  
    if(bResult && (ReadSize == 0))
      break;
    Buf[ReadSize] = '\0';
    strcat(output,Buf);
  }  
  InternetCloseHandle(hFile);
  InternetCloseHandle(hInternet);

  return output;
}
```

Binde sie in dein Programm mit ein.

Wenn du mehrere Variablen empfangen willst musst du nur meine oben gezeigte #-Zeichen Methode einbauen. Dann kannst du mehrere Variablen empfangen, was viel nützlicher ist(Variable1#Variable2#variable3)

PS: Wie man Parameter über die Dos-Shell übergibt ist eine SEHR dumme Frage da es zu selbstverständlich ist. "programm.exe parameter1" DAS HABE ICH ÜBRIGENS OBEN GEZEIGT!! "


----------



## Lumakrieger (17. August 2006)

Kaiser206 hat gesagt.:
			
		

> PS: Wie man Parameter über die Dos-Shell übergibt ist eine SEHR dumme Frage da es zu selbstverständlich ist. "programm.exe parameter1" DAS HABE ICH ÜBRIGENS OBEN GEZEIGT!! "



Ja das verstehe ich ja. Nur ich weiss nicht, was die Dosshell ist? Ist das was in Dev-C? Vll. kenn ich die ja, aber der Name sagt mir jetzt nichts!
Ich teste mal deine Funktion, thx!

EDIT:

deine Funktion gibt folgende Fehler aus:

[Warning] address of local variable `output' returned 
in Zeile:
char output[10000];
Dann noch:
[Warning] character constant too long for its type 
Und zwar da, wo ich Funktion in der Main aufrufe, check mal ob ich das richtig gemacht habe:
x = download('http://mein.ewiglangerlink.de/test/server.php');


----------



## Kaiser206 (17. August 2006)

1.Also bei mir kommen auch die Warnungen. Es sind aber wirklich nur Warnungen und keine Fehler... Man könnte sie eventuel durch kleine Veränderungen im Code entfernen. Ich schau mal.

2.Ja du hast die Funktion richtig aufgerufen.

3. Eine DOS-Shell ist die Eingabeaufforderung. Was DOS ist sollte eigendlich jeder wissen. Eine Shell ist eine Eingabeaufforderung. Ich meinte also die Windows Eingabeaufforderung.

4. Ich habe die char größe auf 10000 gesetzt. Wenn du mit kleinen Werten arbeitest, solltest du sie senken. Eventuel sogar in die Funktioninitialisierung einbauen:

```
char* download(char* URL, int laenge)
```
...

```
char* output[laenge];
```

so zummindest wäre es sinvoller wenn dein Programm den Arbeitsspeicher nicht zu stark belasten soll.

EDIT: Wenn dein String zu lang ist solltest du die Funktionsinitialisierung abändern:
	
	
	



```
char* download(char URL[500])
```
Es ist aber meiner Meinung nach nicht nötig.


----------



## Lumakrieger (17. August 2006)

Ja an die Eingabeaufforderung hab ich auch zuerst gedacht, als du sagtest, ich soll Parameter übergeben. Leider hab ich kein Plan von Windows Konsolen und weiss daher net, wie ich was ausführ, naja, ist ja jetzt eh egal! Ich schau mal, ob ich das Programm zum Laufen kriege, Danke für deine anhaltende Mühe!


----------



## Lumakrieger (23. August 2006)

Mhh, vielleicht mach ich den Clienten doch lieber in Java! Kann mir hier vll zufällig jmd sagen, wie ich das in diesem Thread behandelte Problem in Java lösen kann? Kann mir jmd. ein Beispielcode schicken?


----------



## yan1 (23. August 2006)

> Mhh, vielleicht mach ich den Clienten doch lieber in Java!


Ne weiße Antwort ;-)



> Kann mir jmd. ein Beispielcode schicken?


N'türlich....


```
package as;

import java.io.*;
import java.net.*;

/**
 * 
 * @author Yanick Dickbauer
 * @version 1.0
 *
 */
public class Internet
{
    /**
     * Downloads a Web Page from a Web Server
     * @param url The URL String of the Web Site
     * @return The Content String
     * @throws IOException If an IO Error occurres
     */
    public static String downloadPageContent(String url) throws IOException
    {
        URL server = new URL(url);
        
        HttpURLConnection con = (HttpURLConnection)server.openConnection();
        con.connect();
        return readResponse (con.getInputStream());
    }
    
    private static String readResponse (InputStream in) throws IOException
    {
        StringBuilder sb = new StringBuilder();
        byte[] buffer = new byte[BUFFER_SIZE];
        for (;;)
        {
            int anzBytes = in.read(buffer);
            if (anzBytes <= 0)
                break;
            //convert to string
            //aufpassen - der Content kommt im ASCII Zeichensatz
            String cur = new String(buffer, "ASCII");
            sb.append(cur);
        }
        return sb.toString();    
    }
    
    private static final int BUFFER_SIZE = 256;
}
```

Der Aufruf:


```
import java.io.IOException;

public class Test
{
    public static void main( String[] args)
    {
        try {
            System.out.println(Internet.downloadPageContent("http://www.google.at"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
```

BTW: Es gibt in Java ein super Object vom Typ java.net.HttpURLConnection! Mit diesem Objekt kannst du das HTTP Protokoll echt klasse nützen ohne es selbst implementieren zu müssen!

Lg, Yanick


----------



## rook (23. August 2006)

Lumakrieger hat gesagt.:
			
		

> Okay, ich habe zwischen durch Lebenszeichen eingebaut. Das Ergebnis war, dass das Programm vor der If-else Schleife aufgehört haben muss.
> 
> 
> ```
> ...



is für mich eigentlich unverständlich warum da ein programm aufhört zu laufen 
vlt. solltest du mal dein ganzen code schicken, den du grade an dieser stelle hattest... vieleicht hast du ja einfach nur was vergessen?! 
hab mir zwar den code nicht im detail angeschaut, würde es aber machen wenn du mir deinen postest...


----------



## Lumakrieger (24. August 2006)

Mit Java funktioniert alles nun wunderbar. Und mit C++ gibts nur Probleme. Besonders mit den Datentypen. Deswegen werde ich jetzt doch lieber mit Java weitermachen. Java kann man ja auch zu ner .exe komplilieren oder?


----------



## Navy (24. August 2006)

> Mit Java funktioniert alles nun wunderbar. Und mit C++ gibts nur Probleme. Besonders mit 
> den Datentypen. Deswegen werde ich jetzt doch lieber mit Java weitermachen.

Häh? Welche Probleme mit Datentypen? Wenn Du einen Typ hast den C++ nicht ad hoc bietet, dann bastel ihn Dir selber. C++ ist schließ ansatzeweise Objektorientiert und bietet Dir ne Menge möglichkeiten.

> Java kann 
> man ja auch zu ner .exe komplilieren oder?

Kann man. Du kannst den kompilierten Bytecode in einen ExeContainer packen, aber warum? Das ist werder wirklich was Anderes noch hast Du irgendeinen Vorteil. Java wird gerade nicht nativ kompiliert, das was Du willst ist schlichtweg Konzeptwidersprechend.

  Navy


----------



## Kaiser206 (25. August 2006)

Also ich habe früher "fast" das Gleiche programmiert was du willst. Und ich hatte keine Probleme die sich nicht nach 5min durch das Recherchieren Im Web lösen ließen.

Ich kann dir nicht ganz folgen wieso du auf Java umsteigst. Die Probleme sind imgrunde die gleichen...

Wenn du Probleme mit Datentypen ha, dann versuch doch einfach mal sie zu lösen. Poste sie zum Beispiel hier im Forum. Sonst wirst du nie etwas fertigstellen und verschwendest nur deine Zeit. Programmieren ist ja auch nicht sehr einfach...


----------



## Reiser (5. Februar 2007)

Hallo,

ich möchte einen Url über C++ auslesen. Jedoch komm ich nicht klar. Ich habe dazu den *Visual C++ .NET* benutzt. Mein Code sieht folgendermaßen aus:


```
#include <windows.h>
#include <iostream>
#include "conio.h"
#include <Wininet.h>

using namespace std;

void main() {
	HINTERNET hRootHandle, hOpenUrlHandle;
	hRootHandle = InternetOpen(
								TEXT("Example"), 
								INTERNET_OPEN_TYPE_DIRECT, 
								NULL, 
								NULL, 
								0);
	hOpenUrlHandle = InternetOpenUrl(
								hRootHandle, 
								TEXT("http://www.server.com/default.htm"),
								NULL,
								0,
								INTERNET_FLAG_RAW_DATA,
								0);

	// Close the handle created by InternetOpenUrl, so that the
	// InternetOpen handle can be closed.
	InternetCloseHandle(hOpenUrlHandle); 

	// Close the handle created by InternetOpen.
	InternetCloseHandle(hRootHandle);

	cout << "Hallo";
	getch();

}
```

Habe das Beispiel aus der MSDN Libary. Muss ich dazu eine Libary einfügen? Wenn ja wie geht das?

Vielen Dank für eure Hilfe!

Edit:
Ich krieg nen Haufen Fehlermeldungen, weil ich die Libary nicht eingebunden habe. Wie mache ich das?


----------



## Kaiser206 (7. Februar 2007)

du brauchst die bibliothek init.lib und die unit wininet.h


----------



## yan1 (7. Februar 2007)

Reiser hat gesagt.:


> Hallo,
> 
> Ich habe dazu den *Visual C++ .NET* benutzt.



Hi,

wenn du .NET verwendest, kannst du dir das ganze sparen ;-)

Es gibt eine Klasse namens HttpConnection - oder so ähnlich, lange nicht mehr benutzt. Einfach mal ein bisschen googlen. Mit der geht das in 3 Zeilen..

Lg, Yanick


----------

