Hallo Leute,
als erstes möchte ich mich schonmal entschuldigen, sollte meine Frage unberechtigt sein aber ich habe nichts brauchbares und systemübergreifendes gefunden.
Ich würde gerne in C++ mit Hilfe einer Library (unter Windows .dll und unter Linux .so) ausgeben lassen wie der Dateiname der Anwedung ist in der sie geladen wurden.
Ich stehe mit meinem Kentnissen noch recht am Anfang, habe bis jetzt nur einige simple Win32 Consolen anwendungen erstellt, also eine reine Information welchen Befehl ich nutzen muss würde mir nicht viel bringen, wäre dennoch ein anhaltspunkt.
Also zum schreiben nutze ich Visual C++ 2008 und zum Compilen den enthaltenen. Unter Linux weis ich noch nicht was ich da nutzen sollte, vielleicht hättet ihr ja eine Empfehlung...
Würde mich über hilfe freuen
Danke schon mal,
meine read-methode sieht jetzt so aus:
void IniParser::init(string *path)
{
this->data_stream->open(path->c_str(),ios::in);
}
void IniParser::read(string *data_from_stream)
{
if (this->data_stream->good())
{
while(this->data_stream->eof()!=true)
{
char tmp;
int position;
this->data_stream->get(tmp);
data_from_stream+=tmp;
position=this->data_stream->tellg();
this->data_stream->seekg(position+1);
}
}
else
{
cout<<"Problem mit Datastream"<<endl;
}
}
Wenn ich das Programm jedoch starte passiert nichts, mein code::blocks zeigt mir nur an: Process returned 0 (0x0) executuion time 4,546 sec...
Wisst ihr woran das liegen könnte?
Meine main.cpp sieht so aus:
int main()
{
IniParser *parser;
parser=new IniParser;
string path;
cout<<"Bitte geben sie den Pfad zur zur ladenden Datei an!"<<endl;
cin>>path;
parser->init(&path);
string output;
parser->read(&output);
cout << output<< endl;
return 0;
}
Frager schrieb:
Steht das irgendwo in einem "offiziellem" Dokument?
Ja, im C-Standard. Wo sonst :p
Irgendwo unter "Promotions".
Gilt das auch für Targets bei denen nur für 32Bit-float ein nativer Hardware-Support vorhanden ist und 64Bit-double zwar vom Compiler unterstützt wird aber per SW emuliert werden muss?
Ja, theoretisch schon. Kann aber sehr gut sein, dass der Compiler eine Option bietet, mit der man zwischen strikter ANSI-Konformität und effizienterem Code umschalten kann.
Topic kann gelöscht / ignoriert werden.
Der Code war gar nicht falsch und ich hab mich umsonst verrückt gemacht.
Auch das Auslesen der Schnittstelle funktioniert einwandfrei so wie ich das hab.
Kann halt nur auslesen was er kriegt. Hab ihn mit falschen Werten gefüttert.
Sorry, wenn jetzt jemand sich unnötig mit der Sache beschäftigt hat.
Diese 320 x 240 müssten doch dem Videomodus 13 (? -> lang ist es her) entsprechen.
War unter den DOS-Spielen bei 256 Farben damals oft angesagt.
Unter Windows hab ich mich mit so was noch nicht vergnügt.
He war das ein Speedgewinn, wenn man die Hardware z.B. mit 640 x 480 und 256 direkt ohne Treiber ansteuerte
320 x 240 war wegen der Speicheraufteilung unter DOS noch einfach, bei 640 x 480 und 256 Farben waren schon ein paar Kenntnisse notwendig.
Keine Ahnung was da heute noch von der Hardware und Software noch geht?
Eventuell leistungsfähige DOS-Emulation unter einem anderen OS, wenn dieses direkte Zugriffe auf Speicher und Interrupts überhaupt emulieren kann?
Aber wahrscheinlich kann man das auch anders angehen.
Viel Spass
Okay, danke schonmal.
Was ist mit den Anderen Punkten: ist das "sauberer" Code? Und was ist mit der Warnung? Warum funktioniert das Programm trotz der nichteingebundenen Header-Datei? Ich nutze übrigens CodeBlocks.
SideWinder schrieb:
Zur Information: system() aus der <cstdlib> wartet mit der weiteren Ausführung deines Programms bis zum Ende des aufgerufenen Programms. WinExex() aus der <windows.h> fährt mit deinem Programm fort.
MfG SideWinder
Du meinst bestimmt WinExec()
SideWinder schrieb:
@mngbd: Diese Version liest nur eine Zeile aus dem Puffer, außerdem könnte der Puffer auch leer sein.
Das stimmt, hmm... ich denke nochmal in Ruhe darüber nach.
Ob man da vielleicht was mit getc()/ungetc() tricksen könnte? Ich weiss es nicht.
Langsam glaub ich, dass die C-Pufferung einfach broken design ist. Ein kleines Standard-Makro, das nachsieht, ob etwas im Puffer ist, wäre schon sehr hilfreich.
SideWinder schrieb:
Bitte seht euch den Artikel an und gebt weitere Vorschläge/Feedback ab
Du hast sogar zwei Rufzeichen vor dem undefinierten Verhalten.
Sonst fällt mir nichts auf.
habe den code jetzt doch mal nachgeschaut, hier mal 3 (ungetestete!) Beispiele:
so holt man sich die Position des Konsolencursors:
POINT consolecursorposition()
{
int cursorx;
int cursory;
CONSOLE_SCREEN_BUFFER_INFO consoleinfo;
//info holen
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &consoleinfo);
//consolecursorposition aus info raussuchen
cursorx = consoleinfo.dwCursorPosition.X;
cursory = consoleinfo.dwCursorPosition.Y;
POINT position;
//in POINT konvertieren:
position.x=cursorx;
position.y=cursory;
//zurückgeben:
return position;
}
diese funktion gibt sie Position als POINT-Struktur zurück;
so ändert man die Position des ConsoleCurosors:
void schreibort_konsole_setzen(int x, int y)
{
HANDLE hConsole = GetStdHandle ( STD_OUTPUT_HANDLE );
COORD pos = {x, y};
SetConsoleCursorPosition ( hConsole, pos );
}
um an einen bestimmten Ort zu schreiben und die Position danach zurückzusetzen muss man beide funktionen kombinieren, das könnte zB so aussehen:
void an_position_in_konsole_schreiben(string text, int x, int y)
{
//vorherige Position sichern:
POINT position_vorher=consolecursorposition();
//neue position setzen:
schreibort_konsole_setzen(x, y);
//hinschreiben:
cout<<text;
//schreibort vorher konvertieren:
int x_vorher=position_vorher.x;
int y_vorher=position_vorher.y;
//schreibort zurücksetzen:
schreibort_konsole_setzen(x_vorher, y_vorher);
}
ich hoffe es hat dir weitergeholfen,
andi01.
P.S.: funktioniert es jetzt?
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Hallo
danke für die ausführliche Antwort.
Da gibt es ja sogar Sachen zum arbeiten mit URLs, zum Beispiel UrlEscapeSpaces.
Eigentlich wollte ich ohne windows includes auskommen aber viele Funktionen erscheinen doch recht nützlich.
Danke!
Ach ... dich gibs auch noch
1. ich hoffe, du hast nicht mehr Windows 95 *scherz*
2. Es würde sich anbieten, für extra Fragen jeweils ein Thema aufzumachen
3. du weisst hoffentlich schon mal, was Threads überhaupt sind
4. du informierst dich über CreateThread unter http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx
5. du bindest die windows.h ein.
6. du informierst dich kurz über das Thema Funktionspointer, denn die wirst hier brauchen.
Hi,
für die Funktion main ist die in der Funktion summe deklarierte Variable sum nicht sichbtar ( Siehe unter Sichtbarkeit von Variablen im Skript/Buch deines Vertrauens nach. )
Davon abgesehen, sind Zeiger hier und da nützlich, nicht aber in diesem Fall.
#include<iostream>
using namespace std;
float summe(float x, float y)
{
return x + y;
}
int main()
{
float x,y,
sum; // Bssssss, ich bin eine Biene :)
cout<<"Geben Sie eine Zahl x ein: ";
cin>>x;
cout<<"Geben Sie eine Zahl y ein: ";
cin>>y;
sum = summe(x,y);
cout << endl << "Hello from main: " << x << " + " << y << " = " << sum << endl;
return 0;
}
Gruß,
B.B.
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.