Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.09.2007, 18:45

Logfile nicht vollständig

Ich habe hier einen kleinen Versuch mit Logfiles gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include "..\\..\\..\\Allgemeines\\Windowmaker.h"

using namespace std;

LRESULT CALLBACK Callback(HWND hWnd, UINT msg, WPARAM wParam,LPARAM lParam);

void showMessage(string(*Message)(bool), bool yes_no);

string ApplicationInitMessage(bool Inited);
string WindowInitMessage(bool Inited);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char* Cmd,
                   int CmdLine)
{
    int Pos[2] = {0,0};
    int Weight[2] = {500,500};
    const char className[] = "Logfiletest";
    const char caption[] = "Logfiletest";

    HWND hWnd;
    WNDCLASSEX wc;
    MSG msg;

    wc = InitApp(&hInst, className, Callback);
    if(!(RegisterClassEx(&wc))){
        showMessage(ApplicationInitMessage, false);
        return 1;
    }
    else
        showMessage(ApplicationInitMessage, true);

    hWnd = InitWnd(&hInst, className, caption, Pos, Weight);

    if(hWnd == NULL){
        showMessage(WindowInitMessage, false);
        return 1;
    }
    else
        showMessage(WindowInitMessage, true);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

}


LRESULT CALLBACK Callback(HWND hWnd, UINT msg, WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd, msg, wParam, lParam));
    }

void showMessage(string(*Message)(bool), bool yes_no)
{
    string Text;
    Text = Message(yes_no);
    ofstream Out((char*) "Logfile.txt", ios::ate | ios::out);
    Out.write((char*) Text.c_str(), sizeof(Text));
    Out.close();
}

string ApplicationInitMessage(bool Inited)
{
    string text;
    if(Inited == true)
        text = "Applikation erfolgreich Initialisiert!";
    else
        text = "Applikation nicht erfolgreich Initialisiert!";
    return text;
}

string WindowInitMessage(bool Inited)
{
    string text;
    if(Inited == true)
        text = "Fenster erfolgreich Initialisiert!";
    else
        text = "Fenster nicht erfolgreich Initialisiert!";
    return text;
}


eigenlich müsste im Logfile

Quellcode

1
2
Fenster erfolgreich Initialisiert!
Applikation erfolgreich Initialisiert!


stehen aber wenn ich es öffne lese ich nur:

Quellcode

1
Fenster erfolgreich Initiali


habe ich bei der übergabe der Größe einen Fehler gemacht?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

22.09.2007, 19:17

C-/C++-Quelltext

1
Out.write((char*) Text.c_str(), sizeof(Text)); 


hehe, was gibt sizeof(Text); nochmal zurück!?
außerdem würd ich die ganzen casts nach (char*) weglassen ;)

3

22.09.2007, 19:22

schon die größe^^
aber die muss falsch übergeben sein, wenn die nachricht nich ganz in die Datei geschrieben wird

kann mir jemand sagen was ich daran grundsätzlich falsch mache?
ich probier die ganze zeit mit datentyp veränderungen der funktionen und variablen, ds hinzukriegen, aber es funktioniert einfach nicht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

22.09.2007, 19:25

richtig, die größe von einem std::string objekt...

probiers mal so:

C-/C++-Quelltext

1
Out.write(Text.c_str(), sizeof(Text.length());


;)

5

22.09.2007, 19:28

da kommt bei mir nur noch

Quellcode

1
ApplFens

raus

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

22.09.2007, 19:46

sry, das:

Zitat

C-/C++-Quelltext

1
Out.write(Text.c_str(), sizeof(Text.length());


geht natürlich nicht (sollte auch net kompillieren^^)

schlampigkeitsfehler...hab vergessen was wegzulöschen...

ich meinte natürlich das:

C-/C++-Quelltext

1
Out.write(Text.c_str(), Text.length());

7

22.09.2007, 19:49

Kompiliert hat ers^^

Damit funktionierts!

:)

Danke!!!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

23.09.2007, 09:22

Zitat von »"dot"«

sry, das:

Zitat

C-/C++-Quelltext

1
Out.write(Text.c_str(), sizeof(Text.length());


geht natürlich nicht (sollte auch net kompillieren^^)


Kompiliert wird das schon, aber es wird natürlich ein zu 99% falscher Wert übergeben! :)
@D13_Dreinig

9

23.09.2007, 12:25

? length + 1 oder was hättest de gerne David? ^^ Wobei ich mich wundere warum er nicht einfach std::ostream::operator<< nimmt ^^
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

10

23.09.2007, 12:52

sizeof(Text.length) = 4 :>
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Werbeanzeige