SHFILEOPSTRUCT

28/02/2010 - 23:40 von Wolfgang Badura | Report spam
Hallo VB6-Gemeinde!

Mit der Definition der Struktur SHFILEOPSTRUCT hakt es:
Auf der MS-Seite http://msdn.microsoft.com/de-de/lib...78933.aspx
(30.5.2005) ist in der
Struktur SHFILEOPSTRUCT fFlags as integer deklariert.
Auf der MS-Seite http://support.microsoft.com/kb/165919/de (30. 8. 2004 )
ist in der
Struktur SHFILEOPSTRUCT fFlags as long deklariert.
Mit Tante Google habe ich allerdings abseits von Microsoft meistens
Varianten mit fFlags as integer gefunden.
Interessant ist noch ein Beispiel aus dem Internet, leider habe ich die
Adresse nicht mehr,
in welchem davon ausgegangen wird, daß im Falle der Definition
der Struktur mit fFlags as integer davon ausgegangen wird, daß die
Variablen der Struktur SHFILEOPSTRUCT von VB an Doppelwortgrenzen angelegt
werden,
und deshalb die letzten 12 Bytes um 2 bytes nach links verschoben werden,
ehe
SHFileOperation aufgerufen wird.

Meine Fragen an die Forumsteilnehmer sind nun:
Welche Definition für SHFILEOPSTRUCT ist richtig und
legt VB die Variablen einer Struktur mittels Type immer an Doppelwortgrenzen
an?
Die lokale Hilfe zu VB ist dazu leider nicht sehr hilfreich, oder ich habe
falsch gesucht.

Vielen Dank im Voraus für Informationen,
Wolfgang
 

Lesen sie die antworten

#1 Timo Kunze
01/03/2010 - 00:46 | Warnen spam
Am 28.02.2010 23:40, schrieb Wolfgang Badura:
Mit der Definition der Struktur SHFILEOPSTRUCT hakt es:
Auf der MS-Seite http://msdn.microsoft.com/de-de/lib...78933.aspx
(30.5.2005) ist in der
Struktur SHFILEOPSTRUCT fFlags as integer deklariert.



Da sind gleich 2 Fehler drin. fFlags muss natürlich ein Long sein und
fAborted muss ebenfalls ein Long sein. BOOL ist nicht das selbe wie
VARIANT_BOOL (VARIANT_BOOL = VB6-Boolean).

Du solltest diese Definition nutzen:
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As Long
pTo As Long
fFlags As Long
fAborted As Long
hNameMaps As Long
sProgress As Long
End Type

Und dazu dann die Unicode-Version von SHFileOperation. Die
Unicode-Versionen der APIs sind unter NT-basierten Windows-Versionen
(also alle der letzten 10 Jahre) schneller, da man pro übergebenen
String-Parameter bis zu 4 Konvertierungen einspart.
Wenn du auch noch Windows 95/98/ME unterstützen musst, kommst du
allerdings an den ANSI-Versionen der APIs nicht vorbei.

Timo
www.TimoSoft-Software.de - Unicode controls for VB6
"Those who sacrifice freedom for safety deserve neither."
"Demokratie ist per Definition unsicher. Ihr Schutz entsteht aus der
Überzeugung, dass die demokratischen Kràfte überwiegen und sich – auf
demokratischem Wege – durchsetzen."

Ähnliche fragen