Sunday, 28. August 2005LoadString() C++ Klasse
Um eine WIN32-Applikation in mehreren Sprachversionen zu lokalisieren,
gibt es neben den lokalisierten Forms auch die String tables, die sich in den Programmresourcen befinden. Wenn man sein Programm also mehrsprachig gestalten will, sind alle hardcoierten strings aus dem Sourcecoe zu entfernen und durch Aufrufe zur LoadString Funktion zu ersetzen. Diese Funktion hat nur leider einige Einschränkungen, wie z.B., dass es nicht möglich ist, die Größe des zu ladenden Strings im vornherein zu bestimmen, um dadurch dynamisch Speicher zu allozieren. Der simpelste Ansatz zum Laden von Strings ist nun, einen globalen Puffer zu definieren, der einfach eine fixe Größe ( #define MAX_LOADSTRING 512 z.B. in der Microsoft Hallo-Welt-WIN32-Anwendung, die das Visual Studio durch den Assistenten generiert) hat. Dies ist jedoch mit dem Risiko verbunden, dass einerseits evtl. unnötig Speicher vergeudet wird, andererseits man viell. doch einmal Strings hat, die diese Größe überschreiten und - wenn man darauf vergisst, seine Konstante anzupassen - der Benutzer dann einen abgeschnittenen Text vorfindet.Außerdem kann man in Multithreaded Applikationen logischerweise keine globale Variable verwenden, die den Text erhält, sondern muss zumindest pro Thread eine eigene lokale Variable hierfür definieren. Eine Möglichkeit, diese Limitierung zu umgehen wird von Raymond Chen in seinem Blog beschrieben. Er lädt sich einfach selbst den String aus den Programmresourcen. Eine andere Möglichkeit bietet die CString Klasse mit ihrer LoadString Methode. Das Problem hierbei ist jedoch, dass CString Bestandteil der MFCs ist und man in seiner einfachen WIN32-Anwendung evtl. nicht unbedingt den Ballast der MFCs mitschleppen möchte. Ich habe daher meine eigene kleine StringLoader - Klasse gebastelt, die dynamisch Speicher alloziert und intern behält. Der Destruktor sorgt für die ordnungsgemäße Freigabe des Speichers: Tuesday, 16. August 2005f-prot & amavisd - Stichtag 15.08.2005
Ich benutze, wie bei den vorherigen Blog-Einträgen ja bereits bemerkt, Postfix + amaivsd zum Mails scannen.
Desweiteren benutze ich auch das autoupdater-script, sodass das Programm immer am aktuellsten Stand bleibt. Nur leider hat das auch seine negativen Seiten. Mit Stichtag 15.08.2005 bekam ich plötzlich keine Mails mehr zugestellt. Ein kurzer Blick in top ergab, dass die f-prot virenscanner-Prozesse hängen bleiben und volle CPU-Last fressen, was einen sehr hohen load auf den betroffenen Systemen zur Folge hatund eine Mailzustellung verhindert. Durch eine Suche in den Gogle groups fand ich die Ursache für das Problem: http://lists.debian.org/debian-release/2005/08/msg00054.html Hier ist die Lösung, wie ich das Problem behoben habe (der Tip der obrigen URL klappte bei meinen Installationen nicht):
Anschließend wie üblich mit tail -f /var/log/mail.log überprüfen, ob alles wieder läuft. Sunday, 14. August 2005WORD (=USHORT) = 32bit ?
Heute hatte ich ein interessantes Problem:
Ich wollte ein kleines Tool zum Schreiben von .DBF (DBASE) Dateien schreiben und habe daher die Datenstrukturen entsprechend in einer Struktur definiert. Als ich dann mittels sizeof() die Größe der Struktur ermitteln wollte, war diese leider größer, als sie sein sollte. Die Struktur beinhaltete unter Anderem auch WORDs (=unsigned short), um 16bit-Werte zu repräsentieren. Diese sind auf einer 32bit-Architektur jedoch 32bit groß, was zu dieser Inkonsistenz führte.Endlich weiß ich, wie man das Problem behebt: #pragma pack(1) Dadurch erfolgt die Ausrichtung der Größen entsprechend, sodass es eine lückenlose Speicherbelegung gibt. Thursday, 4. August 2005IBM Dreckstar is teh best
H00rray, die 3. IBM Dreckstar (Deskstar), die heuer eingegangen ist..
und die 2. mit gleichen Symptomen.. Vor ~ 2 Monaten war ich bei nem Kunden, dessen Festplatte komische GEräusche machte (wie wenn sich ständig der Schreib/Lesekopf hin und her bewegen würde). Beim Starten kam auch die S.M.A.R.T. meldung, dass die Platte hin ist (oh Wunder). Gut, das war ein umsichtiger Kunde, der keine wichtigen Daten drauf hatte und das meiste gesichert. Gestern wieder einen Einsatz gehabt, den Freitag davor habe ich eine SMS bekommen mit der Bitte um Rückruf und der Bemerkung "der Computer tut so komisch". Aber da war ich in Urlaub. Tja, gestern war's nur leider schon zu spät, ich konnte nur noch den Tod der Platte feststellen... Und der Kunde hatte natürlich KEIN Backup.. Naja, sskm. Bleibt noch zu erwähnen, dass alle Platten Baujahr 2001-2002 waren. Also, liebe Freunde von IBM-Festplatten, es wird Zeit für ein Backup
(Seite 1 von 1, insgesamt 4 Einträge)
|
SucheBlog abonnierenTop ReferrerVerwaltung des Blog |