| |
| In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.
Hinweis: Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden! | Fragen zu Tipps & Tricks und Workshops im vb@rchivTipp 2271: Erweiterte Dateiattribute | | | Autor: Preisser | Tipp anzeigenDatum: 10.05.11 14:20 |
| Hallo,
die Unicode-Konvertierungen in diesem Tipp sind leider nicht ganz korrekt.
Dies betrifft die Zeilen
GetAttr = GetFileAttributesW(StrConv("\\?\" & fName, vbUnicode)) undSetAttr = CBool(SetFileAttributesW(StrConv("\\?\" & fName, vbUnicode), _
Attributes)) .
VB-Strings sind ja bereits in Unicode (16 Bit pro Zeichen), und diese Verwendung von StrConv ist dafür vorgesehen, dass eine Bytekette von der lokalen ANSI-Kodierung nach Unicode konvertiert wird.
Hier jedoch handelt es sich bereits um Unicode-Text, dessen einzelne Bytes nochmal als ANSI angesehen und nach Unicode konvertiert werden, und dann beim Aufruf der API wieder zurück. Dies führt zum einen dazu, dass unnötigerweise 2 Konvertierungsvorgänge durchgeführt werden würden, was natürlich auch doppelt so viel RAM belegt. Zum anderen kann es auf anderssprachigen Systemen dazu führen, dass die Konvertierung falsch wird. Beispielsweise gibt es auf japanischen Systemen im dortigen ANSI-Zeichensatz einige Zeichen, die durch 2 konsekutive Bytes anstatt nur durch 1 Byte dargestellt werden. Wenn es dort beim Konvertieren von ANSI nach Unicode keine Entsprechung gibt, geht die Information verloren und der Text wird falsch.
Korrekterweise kann man beispielsweise einfach einen Pointer auf den String mit StrPtr() übergeben. Dazu müsste die Deklaration der Unicode-APIs (mit "W" am Schluss) so lauten:
Private Declare Function GetFileAttributesW Lib "kernel32" ( _
ByVal lpFileName As Long) As Long
Private Declare Function SetFileAttributesW Lib "kernel32" ( _
ByVal lpFileName As Long, _
ByVal dwFileAttributes As Long) As Long Der Aufruf müsste dann geändert werden in GetAttr = GetFileAttributesW(StrPtr("\\?\" & fName)) und SetAttr = CBool(SetFileAttributesW(StrPtr("\\?\" & fName), Attributes)) .
Beitrag wurde zuletzt am 10.05.11 um 14:21:44 editiert. | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|