Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Cplusplus Consolen Code in VCL Code umschreiben

Frage Entwicklung

Mitglied: Sapzero

Sapzero (Level 1) - Jetzt verbinden

12.10.2009, aktualisiert 12:23 Uhr, 3790 Aufrufe, 2 Kommentare

Hi,
ich habe einen C++ Quellcode in Console will es Jedoch in VCL umschreiben aber es Funktioniert nicht. Könnte jemand mir dabei Helfen würd mich sehr freuen.

01.
//--------------------------------------------------------------------------- 
02.
 
03.
#include <vcl.h> 
04.
#pragma hdrstop 
05.
 
06.
#include "Unit2.h" 
07.
//--------------------------------------------------------------------------- 
08.
#pragma package(smart_init) 
09.
#pragma resource "*.dfm" 
10.
TForm2 *Form2; 
11.
//--------------------------------------------------------------------------- 
12.
__fastcall TForm2::TForm2(TComponent* Owner) 
13.
	: TForm(Owner) 
14.
15.
16.
//--------------------------------------------------------------------------- 
17.
 
18.
/////////////////////////////// hier drüber ist der VCL Formular //////////////////////  
19.
 
20.
///////// hier unten fängt die Consolen Anwendung an ///  ich versuche es oben einzubauen weis aber nicht wie es geht ///////////// 
21.
 
22.
#include <iostream> 
23.
#include <fstream> 
24.
#include <stdexcept> // runtime_error 
25.
#include <sstream> 
26.
#ifdef linux 
27.
#include <sys/socket.h> // socket(), connect() 
28.
#include <arpa/inet.h> // sockaddr_in 
29.
#include <netdb.h> // gethostbyname(), hostent 
30.
#include <errno.h> // errno 
31.
#else 
32.
#include <winsock2.h> 
33.
#endif 
34.
using namespace std; 
35.
 
36.
std::runtime_error CreateSocketError() 
37.
38.
    std::ostringstream temp; 
39.
#ifdef linux 
40.
    temp << "Socket-Fehler #" << errno << ": " << strerror(errno); 
41.
#else 
42.
    int error = WSAGetLastError(); 
43.
    temp << "Socket-Fehler #" << error; 
44.
    char* msg; 
45.
    if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 
46.
                     NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
47.
                     reinterpret_cast<char*>(&msg), 0, NULL)) 
48.
49.
        try 
50.
51.
            temp << ": " << msg; 
52.
            LocalFree(msg); 
53.
54.
        catch(...) 
55.
56.
            LocalFree(msg); 
57.
            throw; 
58.
59.
60.
#endif 
61.
    return std::runtime_error(temp.str()); 
62.
63.
 
64.
void SendAll(int socket, const char* const buf, const int size) 
65.
66.
    int bytesSent = 0; // Anzahl Bytes die wir bereits vom Buffer gesendet haben 
67.
    do 
68.
69.
        int result = send(socket, buf + bytesSent, size - bytesSent, 0); 
70.
        if(result < 0) // Wenn send einen Wert < 0 zurück gibt deutet dies auf einen Fehler hin. 
71.
72.
            throw CreateSocketError(); 
73.
74.
        bytesSent += result; 
75.
    } while(bytesSent < size); 
76.
77.
 
78.
// Liest eine Zeile des Sockets in einen stringstream 
79.
void GetLine(int socket, std::stringstream& line) 
80.
81.
    for(char c; recv(socket, &c, 1, 0) > 0; line << c) 
82.
83.
        if(c == '\n') 
84.
85.
            return; 
86.
87.
88.
    throw CreateSocketError(); 
89.
90.
 
91.
// Entfernt das http:// vor dem URL 
92.
void RemoveHttp(std::string& URL) 
93.
94.
    size_t pos = URL.find("http://"); 
95.
    if(pos != std::string::npos) 
96.
97.
        URL.erase(0, 7); 
98.
99.
100.
 
101.
// Gibt die Dateiendung im URL zurück 
102.
std::string GetFileEnding(std::string& URL) 
103.
104.
    using namespace std; 
105.
    size_t pos = URL.rfind("."); 
106.
    if(pos == string::npos) 
107.
108.
        return ""; 
109.
110.
    URL.erase(0, pos); 
111.
    string ending = "."; 
112.
    // Algorithmus um Sachen wie ?index=home nicht zuzulassen 
113.
    for(string::iterator it = URL.begin() + 1; it != URL.end(); ++it) 
114.
115.
        if(isalpha(*it)) 
116.
117.
            ending += *it; 
118.
119.
        else 
120.
121.
            break; 
122.
123.
124.
    return ending; 
125.
126.
 
127.
// Gibt den Hostnamen zurück und entfernt ihn aus der URL, sodass nur noch der Pfad übrigbleibt 
128.
std::string RemoveHostname(std::string& URL) 
129.
130.
    size_t pos = URL.find("/"); 
131.
    if(pos == std::string::npos) 
132.
133.
        std::string temp = URL; 
134.
        URL = "/"; 
135.
        return temp; 
136.
137.
    std::string temp = URL.substr(0, pos); 
138.
    URL.erase(0, pos); 
139.
    return temp; 
140.
141.
 
142.
int main() 
143.
144.
    using namespace std; 
145.
 
146.
	//cout << "URL: "; 
147.
	Memo1->Lines->Add("Bitte URL eingeben!\n"); 
148.
	UnicodeString URL = Edit1->Text; 
149.
    //cin >> URL; // User gibt URL der Datei ein, die herruntergeladen werden soll 
150.
 
151.
#ifndef linux 
152.
    WSADATA w; 
153.
    if(int result = WSAStartup(MAKEWORD(2,2), &w) != 0) 
154.
155.
		//cout << "Winsock 2 konnte nicht gestartet werden! Error #" << result << endl; 
156.
		Memo1->Lines->Add("Winsock 2 konnte nicht gestartet werden!\n"); 
157.
		return 1; 
158.
159.
#endif 
160.
 
161.
    RemoveHttp(URL); 
162.
 
163.
    string hostname = RemoveHostname(URL); 
164.
 
165.
    hostent* phe = gethostbyname(hostname.c_str()); 
166.
 
167.
    if(phe == NULL) 
168.
169.
		//cout << "Host konnte nicht aufgeloest werden!" << endl; 
170.
		Memo1->Lines->Add("Host konnte nicht aufgeloest werden!\n"); 
171.
        return 1; 
172.
173.
 
174.
    if(phe->h_addrtype != AF_INET) 
175.
176.
		//cout << "Ungueltiger Adresstyp!" << endl; 
177.
		Memo1->Lines->Add("Ungueltiger Adresstyp!\n"); 
178.
		return 1; 
179.
180.
 
181.
    if(phe->h_length != 4) 
182.
183.
		//cout << "Ungueltiger IP-Typ!" << endl; 
184.
		Memo1->Lines->Add("Ungueltiger IP-Typ!\n"); 
185.
        return 1; 
186.
187.
 
188.
    int Socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 
189.
    if(Socket == -1) 
190.
191.
		//cout << "Socket konnte nicht erstellt werden!" << endl; 
192.
		Memo1->Lines->Add("Socket konnte nicht erstellt werden!\n"); 
193.
		return 1; 
194.
195.
 
196.
    sockaddr_in service; 
197.
    service.sin_family = AF_INET; 
198.
    service.sin_port = htons(80); // Das HTTP-Protokoll benutzt Port 80 
199.
 
200.
    char** p = phe->h_addr_list; // p mit erstem Listenelement initialisieren 
201.
    int result; // Ergebnis von connect 
202.
    do 
203.
204.
        if(*p == NULL) // Ende der Liste 
205.
206.
			//cout << "Verbindung fehlgschlagen!" << endl; 
207.
			Memo1->Lines->Add("Verbindung fehlgschlagen!\n"); 
208.
            return 1; 
209.
210.
 
211.
        service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p); 
212.
        ++p; 
213.
        result = connect(Socket, reinterpret_cast<sockaddr*>(&service), sizeof(service)); 
214.
215.
    while(result == -1); 
216.
 
217.
	//cout << "Verbindung erfolgreich!" << endl; 
218.
	Memo1->Lines->Add("Verbindung erfolgreich!\n"); 
219.
 
220.
    string request = "GET "; 
221.
    request += URL;    // z.B. /faq/index.html 
222.
    request += " HTTP/1.1\n"; 
223.
    request += "Host: " + hostname + "\nConnection: close\n\n"; 
224.
 
225.
    try 
226.
227.
        SendAll(Socket, request.c_str(), request.size()); 
228.
 
229.
        int code = 100; // 100 = Continue 
230.
        string Protokoll; 
231.
        stringstream firstLine; // Die erste Linie ist anders aufgebaut als der Rest 
232.
        while(code == 100) 
233.
234.
            GetLine(Socket, firstLine); 
235.
            firstLine >> Protokoll; 
236.
            firstLine >> code; 
237.
            if(code == 100) 
238.
239.
                GetLine(Socket, firstLine); // Leere Zeile nach Continue ignorieren 
240.
241.
242.
		//cout << "Protokoll: " << Protokoll << endl; 
243.
		Memo1->Lines->Add("Protokoll: "+Protokoll+"\n"); 
244.
 
245.
        if(code != 200) 
246.
247.
            firstLine.ignore(); // Leerzeichen nach dem Statuscode ignorieren 
248.
            string msg; 
249.
            getline(firstLine, msg); 
250.
			//cout << "Error #" << code << " - " << msg << endl; 
251.
			Memo1->Lines->Add("Fehler: "+std::string(code)+"-"+msg+"\n"); 
252.
			return 0; 
253.
254.
 
255.
        bool chunked = false; 
256.
        const int noSizeGiven = -1; 
257.
        int size = noSizeGiven; 
258.
 
259.
        while(true) 
260.
261.
            stringstream sstream; 
262.
            GetLine(Socket, sstream); 
263.
            if(sstream.str() == "\r") // Header zu Ende? 
264.
265.
                break; 
266.
267.
            string left; // Das was links steht 
268.
            sstream >> left; 
269.
            sstream.ignore(); // ignoriert Leerzeichen 
270.
            if(left == "Content-Length:") 
271.
272.
                sstream >> size; 
273.
274.
            if(left == "Transfer-Encoding:") 
275.
276.
                string transferEncoding; 
277.
                sstream >> transferEncoding; 
278.
                if(transferEncoding == "chunked") 
279.
280.
                    chunked = true; 
281.
282.
283.
284.
 
285.
        string filename = "download" + GetFileEnding(URL); 
286.
		//cout << "Filename: " << filename << endl; 
287.
		Memo1->Lines->Add("Filname: "+filename+"\n"); 
288.
        fstream fout(filename.c_str(), ios::binary | ios::out); 
289.
        if(!fout) 
290.
291.
			//cout << "Could Not Create File!" << endl; 
292.
			Memo1->Lines->Add("Could Not Create File!\n"); 
293.
			return 1; 
294.
295.
        int recvSize = 0; // Empfangene Bytes insgesamt 
296.
        char buf[1024]; 
297.
        int bytesRecv = -1; // Empfangene Bytes des letzten recv 
298.
 
299.
        if(size != noSizeGiven) // Wenn die Größe über Content-length gegeben wurde 
300.
301.
            cout << "0%"; 
302.
            while(recvSize < size) 
303.
304.
                if((bytesRecv = recv(Socket, buf, sizeof(buf), 0)) <= 0) 
305.
306.
                    throw CreateSocketError(); 
307.
308.
                recvSize += bytesRecv; 
309.
                fout.write(buf, bytesRecv); 
310.
				cout << "\r" << recvSize * 100 / size << "%" << flush; // Mit \r springen wir an den Anfang der Zeile 
311.
				Memo1->Lines->Add("\r"+IntToStr(recvSize * 100 / size)+"%"); 
312.
313.
314.
        else 
315.
316.
            if(!chunked) 
317.
318.
				//cout << "Downloading... (Unknown Filesize)" << endl; 
319.
				Memo1->Lines->Add("Downloading... (Unknown Filesize)\n"); 
320.
				while(bytesRecv != 0) // Wenn recv 0 zurück gibt, wurde die Verbindung beendet 
321.
322.
                    if((bytesRecv = recv(Socket, buf, sizeof(buf), 0)) < 0) 
323.
324.
                        throw CreateSocketError(); 
325.
326.
                    fout.write(buf, bytesRecv); 
327.
328.
329.
            else 
330.
331.
				//cout << "Downloading... (Chunked)" << endl; 
332.
				Memo1->Lines->Add("Downloading... (Chunked)\n"); 
333.
                while(true) 
334.
335.
                    stringstream sstream; 
336.
                    GetLine(Socket, sstream); 
337.
                    int chunkSize = -1; 
338.
                    sstream >> hex >> chunkSize; // Größe des nächsten Parts einlesen 
339.
                    if(chunkSize <= 0) 
340.
341.
                        break; 
342.
343.
					//cout << "Downloading Part (" << chunkSize << " Bytes)... " << endl; 
344.
					Memo1->Lines->Add("Downloading Part ("+IntToStr(chunkSize)+" Bytes)... \n"); 
345.
                    recvSize = 0; // Vor jeder Schleife wieder auf 0 setzen 
346.
                    while(recvSize < chunkSize) 
347.
348.
                        int bytesToRecv = chunkSize - recvSize; 
349.
						if((bytesRecv = recv(Socket, buf, bytesToRecv > sizeof(buf) ? sizeof(buf) : bytesToRecv, 0)) <= 0) 
350.
351.
                            throw CreateSocketError(); 
352.
353.
                        recvSize += bytesRecv; 
354.
                        fout.write(buf, bytesRecv); 
355.
						//cout << "\r" << recvSize * 100 / chunkSize << "%" << flush; 
356.
						Memo1->Lines->Add("\r"+IntToStr(recvSize * 100 / chunkSize)+"%"); 
357.
358.
					cout << endl; 
359.
					for(int i = 0; i < 2; ++i) 
360.
361.
                        char temp; 
362.
                        recv(Socket, &temp, 1, 0); 
363.
364.
365.
366.
367.
		//cout << endl << "Finished!" << endl; 
368.
		Memo1->Lines->Add("\nFinished!\n"); 
369.
370.
    catch(exception& e) 
371.
372.
		//cout << endl; 
373.
		Memo1->Lines->Add("\n"); 
374.
		cerr << e.what() << endl; 
375.
		Memo1->Lines->Add(string(e.what())+"\n"); 
376.
377.
#ifdef linux 
378.
    close(Socket); // Verbindung beenden 
379.
#else 
380.
    closesocket(Socket); // Windows-Variante 
381.
#endif 
382.
system("pause"); 
383.
}
Gruß

Sapzero
Mitglied: maretz
12.10.2009 um 06:55 Uhr
Moin,

du willst den Code umschreiben? Wie denn? In Arial, 10pt? Oder lieber WingDings 15pt? Hier hilft dir Word (oder OpenOffice...). Alternativ kannst du den auch zu Java, PHP oder Turbo Pascal umschreiben. Da kannst du den Compiler runterladen und loslegen - meinen Segen hast du!

Oder du formulierst deine Frage nochmal so das man die auch versteht und sagst mal was genau du willst...
Bitte warten ..
Mitglied: Sapzero
12.10.2009 um 12:20 Uhr
Hi,
also nochmal ich habe eine Consolen Anwendung in C++. Ich will es jedoch in C++ VCL Formular umschreiben mit einer GUI, damit ich mir eine grafische Benutzeroberfläche bauen kann.
Ich kenn mich nicht ganz damit aus und habs versucht umzuschreiben, jedoch konnte ich es nicht ganz Intergrieren ind den Formular und Bräuchte Hilfe.

Ganz oben in dem Code ist Der VCL Formular mit den dazugehörigen Bibliotheken. Unter dem Formular ist die Consolen Anwendung mit den dazugehörigen Bibliotheken, jedoch weis ich nicht welche ich von denen noch gebrauchen kannund welche nicht.

Die Fehlermeldungen die noch auftauchen, die ich nicht beheben Konnte sind die hier:
[BCC32 Fehler] Unit2.cpp(146): E2451 Undefiniertes Symbol 'Memo1'
[BCC32 Fehler] Unit2.cpp(147): E2451 Undefiniertes Symbol 'Edit1'
[BCC32 Fehler] Unit2.cpp(160): E2357 Eine mit 'UnicodeString' initialisierte Referenz-Variable muss einen L-Wert des Typs 'string' haben
[BCC32 Fehler] Unit2.cpp(160): E2342 Keine Übereinstimmung des Typs beim Parameter 'URL' ('string &' erwartet, 'UnicodeString' erhalten)
[BCC32 Fehler] Unit2.cpp(162): E2357 Eine mit 'UnicodeString' initialisierte Referenz-Variable muss einen L-Wert des Typs 'string' haben
[BCC32 Fehler] Unit2.cpp(162): E2342 Keine Übereinstimmung des Typs beim Parameter 'URL' ('string &' erwartet, 'UnicodeString' erhalten)
[BCC32 Fehler] Unit2.cpp(220): E2094 'operator+=' ist im Typ 'string' für Argumente des Typs 'UnicodeString' nicht implementiert
[BCC32 Fehler] Unit2.cpp(250): E2285 Keine Übereinstimmung für 'string::basic_string(int)' gefunden
[BCC32 Fehler] Unit2.cpp(250): E2031 Typumwandlung von 'int' nach 'string' nicht zulässig
[BCC32 Fehler] Unit2.cpp(284): E2357 Eine mit 'UnicodeString' initialisierte Referenz-Variable muss einen L-Wert des Typs 'string' haben
[BCC32 Fehler] Unit2.cpp(284): E2342 Keine Übereinstimmung des Typs beim Parameter 'URL' ('string &' erwartet, 'UnicodeString' erhalten)
[BCC32 Warnung] Unit2.cpp(348): W8012 Vergleich von signed- und unsigned-Werten
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Erkennung und -Abwehr
Port 7547 SOAP Remote Code Execution Attack Against DSL Modems Internet Storm Center (5)

Link von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Batch & Shell
gelöst Findstr - code für schwieriger Abfrage gesucht (9)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...