Shell-Aufruf

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Shell-Aufruf

Beitrag von stevie »

Ich rufe folgendes auf:

Code: Alles auswählen

   local cFile
   LOCAL xRet, nDll, cExe
   cFile:="neu.txt"
   nDll := DllLoad("SHELL32.DLL")
   cExe := space(200)
   xRet:=DllCall(nDll,DLL_STDCALL,"FindExecutableA", cFile,"", @cExe)
   DllUnLoad(nDll)
Warum muss das denn FindExecutableA heißen, wenn doch laut Doku die Funktion Findexecutable http://msdn.microsoft.com/en-us/library ... S.85).aspx heißt?
Muss ich jetzt bei jeder Shellfunktion ein A dahinterschreiben, damit das klappt?
Viele Grüße
Stevie
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich weiß zwar nicht, warum du nicht bei directory() bleibst ;-)

aber alle API Funktionen die mit Strings umgehen, haben seit der Einführung von UNICODE Schriften ein Problem. Sie müssen sowohl mit den alten Zeichensätzen (1 Byte je Zeichen) als auch mit den UNICODE (2 Byte je Zeichen) umgehen können. Das geht aber nicht mit einer Funktion, die vom Aufruf auch noch kompatibel zur alten sein soll.

Daher gibt es für alle Funktionen die irgendetwas mit Zeichenketten zu tun haben 2 gleichnamige Funktionen mit je einem anderen Buchstaben angehängt:

.....A -> ANSI 1 Byte ...
.....W -> UNICODE 2 Byte (wide glaube ich ...)

da beide das gleiche tun sollen, wird nur der NAME ohne A / W in der Dokumentation erwähnt (und man muss selbst drauf kommen, dass A oder W anzuhängen).
Gruß
Hubert
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

brandelh hat geschrieben:Hi,

ich weiß zwar nicht, warum du nicht bei directory() bleibst ;-)

aber alle API Funktionen die mit Strings umgehen, haben seit der Einführung von UNICODE Schriften ein Problem. Sie müssen sowohl mit den alten Zeichensätzen (1 Byte je Zeichen) als auch mit den UNICODE (2 Byte je Zeichen) umgehen können. Das geht aber nicht mit einer Funktion, die vom Aufruf auch noch kompatibel zur alten sein soll.

Daher gibt es für alle Funktionen die irgendetwas mit Zeichenketten zu tun haben 2 gleichnamige Funktionen mit je einem anderen Buchstaben angehängt:

.....A -> ANSI 1 Byte ...
.....W -> UNICODE 2 Byte (wide glaube ich ...)

da beide das gleiche tun sollen, wird nur der NAME ohne A / W in der Dokumentation erwähnt (und man muss selbst drauf kommen, dass A oder W anzuhängen).
Muss man erstmal drauf kommen.
Viele Grüße
Stevie
Antworten