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

Anonymous

unregistriert

11

21.10.2006, 21:34

rewb0rn
Also mich wundert es kein bisschen das der Code da nur Quatsch ausgibt. Überleg doch mal! hast Du da irgendwo eine spezialisierung der Templates durchgeführt? Nö. Daher geht das nicht.

Ich kann doch mit GetValue keinen float laden mit GetPrivateProfileStringA (Was auch nicht für Unicode ist!) und auf char* casten zur Referenz des Datentyps?!

Das ist doch Strunks! Dazu gibt es in ini-Files keine Chunks, also nimm das Wort bitte nicht in den Mund/Hand wenn es sich um Text-Files handelt.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

12

21.10.2006, 21:55

Zitat von »"unsigned long"«

rewb0rn
Also mich wundert es kein bisschen das der Code da nur Quatsch ausgibt. Überleg doch mal! hast Du da irgendwo eine spezialisierung der Templates durchgeführt? Nö. Daher geht das nicht.

Wie kann ich Templates spezialisieren? Beispiel wäre nett.

Zitat


Ich kann doch mit GetValue keinen float laden mit GetPrivateProfileStringA (Was auch nicht für Unicode ist!)

Ich meinte es geht nicht mit Unicode und GetPrivateStringW weil dann logischerweise ne Nullpointer Exception kommt.

Zitat

und auf char* casten zur Referenz des Datentyps?!
Wie sonst? Ich frag doch die ganze Zeit....

Zitat


Das ist doch Strunks!
Ich weiß, deswegen frag ich doch.

Zitat

Dazu gibt es in ini-Files keine Chunks, also nimm das Wort bitte nicht in den Mund/Hand wenn es sich um Text-Files handelt.
Weiß ich auch, ich meinte damit, wenn die Daten die ich in die ini schreibe hinterher eh nicht lesbar sind kann ichs mit den inis gleich sein lassen und statt dessen lieber Chunks nehmen.

Würdest du vielleicht etwas weniger Energie darauf verwenden mir das Wort im Mund umzudrehen und sie statt dessen auf die Frage konzentrieren würdest dus ja vielleicht sogar schaffen mein Problem zu lösen (trau ich dir durchaus zu)

Anonymous

unregistriert

13

21.10.2006, 22:20

rewb0rn

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
#include <windows.h>
#include <string>

class ini
{
public:
    ini (const std::basic_string<wchar_t>& file) : file_ (file) {}
    ~ini (void) {}

    template<typename T> inline T get_value (const std::basic_string<wchar_t>& section,
                                             const std::basic_string<wchar_t>& key,
                                             const T& default_value)
    {
        return (T(default_value));
    }

    template<>       inline float get_value (const std::basic_string<wchar_t>& section,
                                             const std::basic_string<wchar_t>& key,
                                             const float& default_value)
    {
        wchar_t buffer[512] = L"";
        ::swprintf_s (buffer, L"%f", default_value);
        
        ::GetPrivateProfileStringW (section.c_str (), key.c_str (), buffer, buffer, static_cast<unsigned long>(::wcslen (buffer)), file_.c_str ()); 

        return (static_cast<float>(::_wtof (buffer)));
    }

    template<> inline unsigned long get_value (const std::basic_string<wchar_t>& section,
                                               const std::basic_string<wchar_t>& key,
                                               const unsigned long& default_value)
    {
        wchar_t buffer[512] = L"";
        ::swprintf_s (buffer, L"%d", default_value);
        
        ::GetPrivateProfileStringW (section.c_str (), key.c_str (), buffer, buffer, static_cast<unsigned long>(::wcslen (buffer)), file_.c_str ()); 

        return (static_cast<unsigned long>(::_wtol (buffer)));
    }

private:
    const std::basic_string<wchar_t> file_;
};

int main (void)
{
    ini ini (L"test.ini");
    ini.get_value (L"section", L"key_float", 3.14f);
    ini.get_value (L"section", L"key_unsigned_long", 4L);

    return 0;
}
Ist das denn wirklich SO SCHWER?

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

14

21.10.2006, 22:29

Super, danke! Hatte zwar gehofft, dass man sich die Spezifikationen für die einzelnen Typen sparen kann (weil ich so viele verschiedene hab) aber dann muss es wohl sein.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

21.10.2006, 22:37

Es geht auch noch mit weniger Schreibarbeit. Z.B. könnte man sich auf zwei Operationen pro Datentyp beschränken:

1. String -> Datentyp (Parsen)
2. Datentyp -> String

Dann hast du das Gedöhns mit GetPrivateProfileStringW nur an einer einzigen Stelle im Code, und um das Umwandeln der Datentypen kannst du dich an separater Stelle kümmern. Das ist auch hilfreich, wenn du in deinem Programm noch irgendwoanders deine Daten in Strings umwandeln willst bzw. umgekehrt.

Anonymous

unregistriert

16

21.10.2006, 22:59

rewb0rn
Schon lustig, ich komm in professionellen Programmen mit 4 Datentypen (unsigned long, float, bool, string) aus und Du hast so viele? Warum?!

Dazu kannst Du Dir nichts sparen, denn wie ich schon sagte: Dein Compiler kann nicht stinken wie Du den Datentyp haben willst.

David Scherfgen
Rischtisch.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

17

21.10.2006, 23:23

Die sind von der Irrlicht definiert. zB irr::video::E_DRIVER_TYPE, kann zwar nur 4 oder 5 Werte annehmen, aber lässt sich nicht konvertieren (oder ich bin zu dumm). Das ist der einzige mit dem ich jetzt testweise arbeite, aber da sind noch jede Menge anderer.

Anonymous

unregistriert

18

21.10.2006, 23:29

rewb0rn
http://irrlicht.sourceforge.net/docu/_e_driver_types_8h-source.html << Ich sehe da keinen Datentypen sondern einen unsigned long.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

19

21.10.2006, 23:32

ja dachte ich auch. Ich benutze deine Funktionen. Wenn ich keine Konvertierung benutze geht er in den Fall für die nichtspezialisierten Typen, wenn ich es auf unsigned long caste gibts nen Fehler. Es klappt nur wenn ich ne Funktion für E_DRIVER_TYPE schreibe.

Anonymous

unregistriert

20

21.10.2006, 23:36

rewb0rn
Also langsam bekomm ich zustände: Könntest Du mal Klartext reden und sagen WAS FÜR FEHLER auftauchen?!

Werbeanzeige