Freigeben über


SHLWAPI-Wrapper-Funktionen

[Diese Funktionen sind über Windows XP Service Pack 2 (SP2) und Windows Server 2003 verfügbar. Sie können in nachfolgenden Versionen von Windows geändert oder nicht verfügbar sein.]

Die Tabellen in diesem Dokument enthalten Wrapperfunktionen aus Shlwapi.dll, die eingeschränkte Unicode-Funktionalität auf Windows 95, Windows 98 und Windows Millennium Edition (Windows Me) bereitstellen.

Windows 95, Windows 98 und Windows Millennium Edition (Windows Me) werden hier als "native ANSI-Plattformen" bezeichnet. Auf nativen ANSI-Plattformen konvertieren diese Wrapperfunktionen die Unicode-Eingabezeichenfolgenparameter in ANSI und rufen ANSI-Versionen von Funktionen in der Spalte Weiterleiten an auf. AppendMenuWrapW ruft beispielsweise AppendMenuA auf, die die ANSI-Version von AppendMenu ist. Die anderen Funktionen folgen demselben Muster. Alle von der ANSI-Funktion zurückgegebenen Zeichenfolgen werden in Unicode konvertiert und an die aufrufende Anwendung zurückgegeben. Abgesehen von den ausnahmen, die in der Spalte Hinweise aufgeführt sind, verfügt die Wrapperfunktion über die gleiche Syntax und bietet die gleiche Funktionalität wie die Funktion in der Spalte Forwards To . Ausführliche Informationen zur Verwendung finden Sie auf dieser Referenzseite.

Sicherheitswarnung: Mehrere Unicode-Zeichenfolgen können in dieselbe ANSI-Zeichenfolge konvertiert werden. Unerwartete Kollisionen nach der Konvertierung können zu unerwartetem Verhalten führen. Wenn beispielsweise CreateEventWrapW verwendet wird, um zwei unterschiedlich benannte Ereignisse zu erstellen, deren Namen nach der Konvertierung von Unicode in ANSI übereinstimmen, gibt der zweite Aufruf ein Handle an dasselbe Ereignis wie der erste Aufruf zurück, obwohl die ursprünglichen Unicode-Zeichenfolgen unterschiedlich waren.

Die Betriebssysteme Microsoft Windows NT, Windows 2000, Windows XP, Windows Server 2003 und höher werden hier als "native Unicode-Plattformen" bezeichnet. In den meisten Fällen leiten diese Wrapperfunktionen auf nativen Unicode-Plattformen eingabezeichenfolgenparameter einfach an die Unicode-Version der Funktion in der Spalte Weiterleiten an weiter. AppendMenuWrapW leitet beispielsweise an AppendMenuW weiter, dies ist die Unicode-Version von AppendMenu. Die anderen Funktionen folgen demselben Muster. Alle Zeichenfolgen, die von der Unicode-Funktion zurückgegeben werden, werden an die aufrufende Anwendung zurückgegeben. Abgesehen von den ausnahmen, die in der Spalte Hinweise aufgeführt sind, verfügt die Wrapperfunktion über die gleiche Syntax und bietet die gleiche Funktionalität wie die Funktion in der Spalte Forwards To . Ausführliche Informationen zur Verwendung finden Sie auf dieser Referenzseite.

Sicherheitswarnung: Die sicherheitsrelevanten Probleme, die für die Funktionen in der Spalte Weiterleitungen an festgestellt wurden, gelten auch für die entsprechenden Wrapperfunktionen. Ausführliche Informationen finden Sie in der Referenzdokumentation für die Funktion in der Spalte Weiterleitungen an .

Die Wrapperfunktionen in dieser Tabelle sind alle in Shlwapi.dll enthalten. Um sie aufzurufen, müssen Sie die in der Tabelle aufgeführte Ordnungszahl verwenden.

Hinweis

Diese Wrapperfunktionen sind unter Windows XP verfügbar, bieten aber keine Wrapperfunktionen in Windows XP Service Pack 2 (SP2) und höher. Sie bieten auch keine Wrapperfunktionen in Windows Server 2003. Sie sollten stattdessen die funktionen verwenden, die in der Spalte Weiterleitungen an aufgeführt sind.

 

Funktion Ordinal Weiterleiten an DLL Bemerkungen
AppendMenuWrapW 36 AppendMenu USER32 (a), (f), (Menü)
CallWindowProcWrapWrapW 37 CallWindowProc USER32 (i)
CharLowerWrapW 38 CharLower KERNEL32.DLL (e)
CharUpperBufWrapWrapW 44 CharUpperBuff KERNEL32.DLL (e)
CharUpperWrapW 43 CharUpper KERNEL32.DLL (e)
CompareStringWrapW 45 CompareString KERNEL32.DLL (CompareString)
CopyFileWrapW 112 CopyFile KERNEL32.DLL (a), (c)
CreateEventWrapW 51 CreateEvent KERNEL32.DLL a)
CreateFileWrapW 52 CreateFile KERNEL32.DLL (a), (c)
CreateWindowExWrapW 55 Createwindowex USER32 a)
DefWindowProcWrapWrapW 56 DefWindowProc USER32 (i)
DeleteFileWrapW 57 DeleteFile KERNEL32.DLL (a), (c)
DialogBoxParamWrapW 59 DialogBoxParam USER32 (f), (i), (DialogBoxParam)
DispatchMessageWrapW 60 DispatchMessage USER32 (i)
DragQueryFileWrapW 318 DragQueryFile SHELL32 (b), (c), (g), (DragQueryFile)
DrawTextExWrapW 301 DrawTextEx USER32 a), d)
DrawTextWrapW 61 Drawtext USER32 a)
ExtTextOutWrapW 299 ExtTextOut GDI32 (d), (f), (ExtTextOut)
FormatMessageWrapW 68 FormatMessage KERNEL32.DLL (a), (g), (FormatMessage)
GetClassInfoWrapW 69 GetClassInfo USER32 (GetClassInfo)
GetDateFormatWrapWrapW 311 GetDateFormat KERNEL32.DLL (a), (g), (DateTime)
GetDlgItemTextWrapW 74 GetDlgItemText USER32 g)
GetFileAttributesWrapW 75 GetFileAttributes KERNEL32.DLL a), c)
GetLocaleInfoWrapW 77 GetLocaleInfo KERNEL32.DLL g)
GetMenuItemInfoWrapW 302 GetMenuItemInfo USER32 (f), (g), (MenuItemInfo)
GetModuleFileNameWrapWrapW 80 GetModuleFileName KERNEL32.DLL c), g)
GetModuleHandleWrapW 83 GetModuleHandle KERNEL32.DLL c), g)
GetObjectWrapW 84 GetObject GDI32 g)
GetOpenFileNameWrapWrapW 403 GetOpenFileName COMDLG32 (a), (b), (g), (OpenFileName)
GetSaveFileNameWrapW 389 GetSaveFileName COMDLG32 (a), (b), (g), (OpenFileName)
GetSystemDirectoryWrapW 81 GetSystemDirectory KERNEL32.DLL c), g)
GetTimeFormatWrapW 310 GetTimeFormat KERNEL32.DLL (a), (g), (DateTime)
GetWindowLongWrapW 94 GetWindowLong USER32 (WindowLong)
GetWindowsDirectoryWrapW 97 GetWindowsDirectory KERNEL32.DLL (c), (g)
GetWindowTextLengthWrapW 96 GetWindowTextLength USER32 (j)
GetWindowTextWrapWrapW 95 GetWindowText USER32 (f), (g)
InsertMenuItemWrapW 98 InsertMenuItem USER32 (a), (f), (Menu), (MenuItemInfo)
IsCharAlphaWrapW 25 IsCharAlpha USER32 (e)
IsCharAlphanumericWrapW 28 IsCharAlphanumeric KERNEL32.DLL (e)
IsCharUpperWrapW 26 IsCharUpper USER32 (e)
LoadLibraryWrapW 105 LoadLibrary KERNEL32.DLL (a), (c)
LoadStringWrapW 107 LoadString KERNEL32.DLL (e)
MessageBoxWrapW 340 Messagebox USER32 a)
MoveFileWrapW 113 MoveFile KERNEL32.DLL (a), (c)
OutputDebugStringWrapW 115 Outputdebugstring KERNEL32.DLL a)
PeekMessageWrapW 116 PeekMessage USER32 (PeekMessage und PostMessage)
PostMessageWrapW 117 PostMessage USER32 (PeekMessage und PostMessage)
RegCreateKeyExWrapWrapW 120 RegCreateKeyEx ADVAPI32 a)
RegisterClassWrapW 131 Registerclass USER32 (a), (RegisterClass)
RegOpenKeyExWrapW 125 RegOpenKeyEx ADVAPI32 a)
RegQueryValueExWrapW 128 RegQueryValueEx ADVAPI32 (a), (g), (ValueEx), (RegQueryValueExW)
RegQueryValueWrapW 127 RegQueryValue ADVAPI32 (a), (g)
RegSetValueExWrapW 130 RegSetValueEx ADVAPI32 (a), (ValueEx)
SendMessageWrapW 136 SendMessage USER32 (SendMessage)
SetDlgItemTextWrapW 138 SetDlgItemText USER32 a)
SetWindowLongWrapW 141 SetWindowLong USER32 (WindowLong)
SetWindowTextWrapW 143 SetWindowText USER32 a)
ShellExecuteExWrapW 35 ShellExecuteEx SHELL32 (a), (b), (ShellExecuteEx)
ShellMessageBoxWrapW 388 ShellMessageBox SHLWAPI (a), (FormatMessage)
SHGetFileInfoWrapW 313 SHGetFileInfo SHELL32 (a), (b), (g)
SHGetPathFromIDListWrapW 334 SHGetPathFromIDList USER32 g)
TranslateAcceleratorWrapW 146 Translateaccelerator USER32 (i)
Aufheben der Registrierung vonClassWrapW 147 Aufheben der RegistrierungKlasse USER32 a)

 

Die Wrapperfunktionen in der folgenden Tabelle führen keine Zeichensatzkonvertierung aus. Stattdessen bieten sie eingeschränkte Unterstützung für Betriebssystemfeatures, die auf früheren Plattformen nicht verfügbar sind.

Funktion Ordinal Weiterleiten an DLL Bemerkungen
MLGetUILanguage 376 GetUserDefaultUILanguage KERNEL32.DLL h)
SHCancelTimerQueueTimer 265 DeleteTimerQueueTimer KERNEL32.DLL h)
SHDeleteTimerQueue 262 DeleteTimerQueue KERNEL32.DLL h)
SHInterlockedCompareExchange 342 InterlockedCompareExchangePointer KERNEL32.DLL (CompareExchange)
SHQueueUserWorkItem 260 Queueuserworkitem KERNEL32.DLL (QueueUserWorkItem), (h)
SHSetTimerQueueTimer 263 CreateTimerQueueTimer KERNEL32.DLL (SetTimerQueueTimer), (h)

 

Bemerkungen

a)

Wenn eine Zeichenfolgenkonvertierung erforderlich ist, werden alle Zeichenfolgen über die CP_ACP Codepage konvertiert.

Diese Funktionen verwenden am besten geeignete Zeichen und führen beim Konvertieren von Unicode in ANSI keine Standardüberprüfung durch. Wenn die Zeichenfolge nicht aus Unicode in ANSI konvertiert werden kann, übergibt die Wrapperfunktion außerdem eine NULL-Zeichenfolge an die zugrunde liegende ANSI-Funktion. Dies kann beispielsweise auftreten, wenn nicht genügend Arbeitsspeicher vorhanden ist. Das Übergeben einer NULL-Zeichenfolge kann dazu führen, dass einige Funktionen mit einem ungültigen Parameterfehler fehlschlagen, aber andere Funktionen akzeptieren die NULL-Zeichenfolge und behandeln sie als den beabsichtigten Parameter. Beispielsweise tritt ein Fehler auf, wenn die CreateWindowExWrapW-Funktion versucht, den lpWindowName-Parameter in ANSI zu konvertieren, und CreateWindowEx ein Fenster mit einem leeren Untertitel erstellt. Der Wrapper benachrichtigt Sie nicht, wenn diese Probleme aufgetreten sind.

Microsoft Layer for Unicode (MSLU) überprüft bei der Konvertierung von Unicode in ANSI auf Fehler und gibt entsprechende Fehlerwerte zurück. Die Wrapperfunktion AppendMenu im MSLU gibt beispielsweise 0 zurück, wenn das Element nicht erfolgreich angefügt wurde.

b)

Diese Funktionen verwenden einen verzögert geladenen Link zur entsprechenden Funktion. Dies bedeutet, dass die DLL, die die Funktion in der Spalte "Weiterleiten an" enthält, vom Shlwapi.dll erst geladen wird, wenn eine Funktion in dieser DLL aufgerufen wird. Der Microsoft Visual C++ Linker unterstützt diese Funktionalität allgemeiner über die Option /DELAYLOAD.

(c)

Diese Funktion bearbeitet Dateinamen. Wie in (a) erwähnt, konvertieren die Funktionen alle Zeichenfolgen über die CP_ACP Codepage. Sie überprüfen nicht, ob die Datei-E/A-Funktionen auf den ANSI-Modus festgelegt wurden. Wenn sich die Datei-E/A-Funktionen im OEM-Modus befinden, werden die Zeichenfolgen in und aus dem falschen Zeichensatz konvertiert. Eine Anwendung kann die Datei-E/A-Funktionen explizit auf den OEM-Modus festlegen, indem sie die SetFileApisToOEM-Funktion aufruft .

**Sicherheitswarnung: ** Die Verwendung dieser Wrapperfunktionen für Dateinamen kann die Sicherheit Ihrer Anwendung beeinträchtigen. Da keine Standardüberprüfung durchgeführt wird und am besten geeignete Zeichen verwendet werden, können Dateinamenzeichen auf unerwartete Weise konvertiert werden. Dies kann zu Spoofing-Angriffen des Dateisystems führen. Außerdem kann während der Konvertierung von Unicode in ANSI ein unbeaufsichtigter Datenverlust auftreten.

Die MSLU hat diese Einschränkungen nicht.

d)

Wenn die Zeichenfolge, die gezeichnet wird, einen Zeichensatz erfordert, der in der Schriftart, die im Gerätekontext ausgewählt ist, nicht verfügbar ist, verwenden diese Wrapperfunktionen die Schriftverknüpfungsfunktion der MLang-Bibliothek , um jedes Zeichen in einer entsprechenden Schriftart zu rendern. Im Gegensatz zu den meisten anderen Wrapperfunktionen sind diese unter Microsoft Windows NT 4.0 zusätzlich zu nativen ANSI-Plattformen funktionsfähig.

e)

Vollständige Unicode-Implementierungen dieser Funktionen sind auf nativen ANSI-Plattformen verfügbar. Diese Funktionen rufen die zugehörige ANSI-Funktion nicht auf.

f)

Wenn die Benutzerstandardsprache der BENUTZERoberflächen einen anderen Zeichensatz als die standardsprachliche Benutzeroberflächen verwendet, versucht das System, Dialogvorlagen und Unterklassensteuerelemente neu zu schreiben und Menüelemente in Besitzerziehung zu konvertieren, sodass Zeichenfolgen in der Benutzerstandardsprache weiterhin ordnungsgemäß angezeigt werden. Die einzigen Steuerelemente, die von den Regeln für das Neuschreiben der Dialogvorlage unterstützt werden, sind statische Steuerelemente, Schaltflächen-, Listbox- und Kombinationsfeldsteuerelemente. Diese Steuerelemente sind so unterklassiert, dass die SendMessageWrapW-Funktion die ursprüngliche Unicode-Zeichenfolge abrufen kann, ohne über den ANSI-Zeichensatz übersetzt zu werden. Im Gegensatz zu den meisten anderen Wrapperfunktionen sind diese sowohl auf Microsoft Windows NT 4.0 als auch auf nativen ANSI-Plattformen funktionsfähig. In den Anmerkungen in der Dokumentation der FUNKTION MLLoadLibrary finden Sie weitere Informationen dazu, wie die Benutzerstandard-UI-Sprache und die systemstandardbasierte UI-Sprache bestimmt werden.

g)

Wenn eine Zeichenfolgenkonvertierung erforderlich ist, werden alle Zeichenfolgen über die CP_ACP Codepage konvertiert.

Wenn die zurückgegebene Zeichenfolge beim Konvertieren von ANSI in Unicode für die Ausgabe nicht in den bereitgestellten Puffer passt, schneiden die Wrapperfunktionen die Zeichenfolge ab. Diese Funktionen, die die Anzahl der in den Puffer kopierten Zeichen oder die Anzahl der Zeichen zurückgeben, die erforderlich sind, um eine Abschneidung zu vermeiden, geben nicht die Anzahl der Unicode-Zeichen zurück, die in den Puffer kopiert wurden, der vom Aufrufer der Wrapperfunktion bereitgestellt oder vom Aufrufer benötigt wird. Sie geben die Anzahl der ANSI-Zeichen zurück, die in den Puffer kopiert oder von der zugrunde liegenden ANSI-Funktion benötigt werden. Die MSLU hat diese Einschränkungen nicht.

h)

Auf Systemen vor Windows XP implementieren diese Funktionen einen vereinfachten Threadpool und eine Timerwarteschlange. Unter Windows XP und höher verwenden diese Funktionen den Systemthreadpool und die Systemtimerwarteschlange. Für die Zeitgeberwarteschlangenfunktionen muss der hQueue-Parameter auf NULL festgelegt werden, um anzugeben, dass der Vorgang in der Standardtimerwarteschlange ausgeführt werden soll.

(i)

Auf Unicode-Plattformen übersetzen diese Funktionen die Nachricht von Unicode in ANSI, wenn das Zielfenster ANSI ist. Diese Funktionen führen keine Nachrichtenübersetzung auf nativen ANSI-Plattformen durch. Daher muss beim Aufrufen von Anwendungen, die diese Funktion aufrufen, sichergestellt werden, dass die Nachricht auf Unicode-Plattformen im Unicode-Format und auf ANSI-Plattformen im ANSI-Format vorliegt. Für instance muss der wParam im folgenden Funktionsaufruf ein Unicode-Codepunkt sein, wenn das Programm auf einer Unicode-Plattform ausgeführt wird, und muss ein ANSI-Zeichen sein, wenn das Programm auf einer ANSI-Plattform ausgeführt wird.

CallWindowProcWrapW(prevWndProc, hwnd, WM_CHAR, wParam, lParam);

Die MSLU verfolgt den Zeichensatz der Zielfensterprozedur nach und konvertiert die Nachricht nach Bedarf.

(j)

Auf ANSI-Plattformen geben diese Funktionen die Länge der zugrunde liegenden ANSI-Zeichenfolge zurück, nicht die Länge der übersetzten Unicode-Zeichenfolge. Die MSLU hat diese Einschränkungen nicht.

(CompareExchange)

Die Syntax für SHInterlockedCompareExchange unterscheidet sich etwas von der von InterlockedCompareExchangePointer, funktioniert aber identisch.

void* SHInterlockedCompareExchange(void **ppDest, void *pExch, void *pComp);

(CompareString)

Denken Sie daran, dass auf nativen ANSI-Plattformen beide Zeichenfolgen in ANSI konvertiert und als ANSI-Zeichenfolgen verglichen werden. Wenn die Unicode-Zeichenfolgen Zeichen enthalten, die in ANSI nicht dargestellt werden können, können die Ergebnisse unerwartet sein. Wenn die STANDARD-ANSI-Codepage beispielsweise keine CJK-Zeichen unterstützt, würden die Zeichenfolgen L"\x66F0" und L"\x6708" auf nativen ANSI-Plattformen als gleich vergleichen, da beide der ANSI-Zeichenfolge "?" zugeordnet sind.

(DateTime)

In Shlwapi.dll Version 5.0, die mit Windows 2000 ausgeliefert wurde, muss die Codepage des Gebietsschemabezeichners, die Sie als ersten Parameter von GetDateFormatWrapW und GetTimeFormatWrapW übergeben, mit der aktuellen ANSI-Codepage übereinstimmen. Andernfalls kann die zurückgegebene Zeichenfolge falsch konvertiert werden. Diese Einschränkung gilt nicht für Shlwapi.dll Versionen 5.5 oder höher. Dies bedeutet, dass Windows XP und höhere Systeme dieser Einschränkung nicht unterliegen. Die MSLU hat diese Einschränkung nicht.

(DialogBoxParam)

Der lpTemplateName-Parameter für die DialogBoxParamWrapW-Funktion darf keine Zeichenfolge sein. Es muss sich um eine Ordnungszahl handeln, die vom MAKEINTRESOURCE-Makro erstellt wurde. Die durch den lpDialogFunc-Parameter angegebene Dialogprozedur empfängt ANSI-Nachrichten auf nativen ANSI-Plattformen und Unicode-Nachrichten auf nativen Unicode-Plattformen. Die Dialogprozedur muss für beide Fälle vorbereitet sein. Die MSLU hat diese Einschränkungen nicht.

(ExtTextOut)

Native ANSI-Plattformen implementieren die ExtTextOutW-Funktion sowie native Unicode-Plattformen. Der Zweck von ExtTextOutWrapW besteht darin, eine Schriftartverknüpfung durchzuführen, wie in einer separaten Bemerkung beschrieben.

(DragQueryFile)

Die DragQueryFileWrapW-Funktion ermöglicht es Ihnen nicht, die Länge einer Datei im Dropdownhandle abzufragen, indem Sie NULL als lpszFile-Parameter übergeben. Die MSLU hat diese Einschränkungen nicht.

(FormatMessage)

Auf nativen ANSI-Plattformen werden die Formate in der Zeichenfolge nicht von Unicode in ANSI konvertiert. Im folgenden Codebeispiel ist beispielsweise ein Fehler aufgetreten.

WCHAR szBuffer[MAX_PATH];
DWORD_PTR Arguments[2] = { L"String1", L"String2" };

FormatMessageWrapW(FORMAT_MESSAGE_FROM_STRING, 
               L"%1!s! %2", 
               0, 0, 
               szBuffer, 
               MAX_PATH, 
               (va_list*)Arguments);

In diesem Codebeispiel wird das Format "!s!" verwendet. Auf nativen ANSI-Plattformen wird diese Zeichenfolge an die ANSI-Version der FormatMessage-Funktion übergeben. Daher wird anstelle einer Unicode-Zeichenfolge eine ANSI-Zeichenfolge erwartet. In ähnlicher Weise impliziert das Format "%2" ein Zeichenfolgenargument. Wenn sie an die ANSI FormatMessage-Funktion übergeben wird, wird sie als ANSI-Zeichenfolge und nicht als Unicode-Zeichenfolge interpretiert. Die richtige Formatzeichenfolge ist L"%1!ws! %2!ws!". Dadurch werden Zeichenfolgen sowohl auf ANSI- als auch auf Unicode-Plattformen korrekt ausgegeben.

Die Funktion unterstützt die spezielle Formatzeichenfolge "%0" nicht.

Die MSLU hat diese Einschränkungen nicht.

(GetClassInfo)

Auf nativen ANSI-Plattformen werden die Mitglieder lpszMenuName und lpszClassName der WNDCLASS-Struktur nicht in Unicode übersetzt und immer auf NULL festgelegt. Darüber hinaus wird die im lpfnWndProc-Member der WNDCLASS-Struktur zurückgegebene Fensterprozedur nicht in Unicode übersetzt und verweist auf eine ANSI-Fensterprozedur. Die MSLU hat diese Einschränkungen nicht.

In Shlwapi.dll Version 5.0, die mit Windows 2000 ausgeliefert wurde, werden Menüelementzeichenfolgen, die Registerkartenzeichen (\t) enthalten, möglicherweise nicht ordnungsgemäß angezeigt. Diese Einschränkung gilt nicht für Shlwapi.dll Versionen 5.5 oder höher. Dies bedeutet, dass Windows XP und höhere Systeme dieser Einschränkung nicht unterliegen. Die MSLU hat diese Einschränkung nicht.

Diese Funktion unterstützt nur die Microsoft Windows NT 4.0-Version der MENUITEMINFOW-Struktur . Dieser Struktur fehlt ein hbmpItem-Member . Darüber hinaus unterstützt die Funktion das MIIM_BITMAP-Flag nicht. Die MSLU hat diese Einschränkungen nicht.

(OpenFileName)

Das cbSize-Element der OPENFILENAMEW-Struktur muss auf sizeof(OPENFILENAME_NT4W) festgelegt werden.

Das lpstrCustomFilter-Element der OPENFILENAMEW-Struktur muss auf NULL festgelegt werden.

Die Werte der Elemente nMaxFile und nMaxFileTitle der OPENFILENAMEW-Struktur dürfen MAX_PATH nicht überschreiten.

Wenn das lpfnHook-Element der OPENFILENAMEW-Struktur nicht NULL ist, muss es auf eine ANSI-Hookprozedur auf nativen ANSI-Plattformen und eine Unicode-Hookprozedur auf nativen Unicode-Plattformen verweisen.

Die MSLU hat diese Einschränkungen nicht.

(PeekMessage und PostMessage)

Auf nativen ANSI-Plattformen wird keine Übersetzung für die übertragene oder abgerufene Nachricht durchgeführt. Die übertragene/abgerufene Nachricht ist ANSI auf nativen ANSI-Plattformen und Unicode auf nativen Unicode-Plattformen. Die aufrufende Anwendung muss für beide Fälle vorbereitet sein. Wenn die abgerufene Nachricht beispielsweise WM_CHAR ist, handelt es sich bei wParam um einen ANSI-Zeichencode auf nativen ANSI-Plattformen, aber um einen Unicode-Codepunkt auf nativen Unicode-Plattformen. Die MSLU hat diese Einschränkungen nicht.

(QueueUserWorkItem)

Die SHQueueUserWorkItem-Funktion unterscheidet sich geringfügig von der entsprechenden QueueUserWorkItem-Funktion . Die Syntax für SHQueueUserWorkItem wird hier gezeigt.

BOOL SHQueueUserWorkItem(LPTHREAD_START_ROUTINE pfnCallback,
                     LPVOID pContext,
                     LONG lPriority,
                     DWORD_PTR dwTag,
                     DWORD_PTR * pdwId,
                     LPCSTR pszModule,
                     DWORD dwFlags);

Die Parameter sollten wie folgt festgelegt werden:

  • Die Parameter pfnCallback und pContext haben die gleiche Bedeutung wie die Parameter Function bzw . Context von QueueUserWorkItem.

  • Der dwTag-Parameter ist nicht verwendet und muss auf 0 festgelegt werden.

  • Der pdwld-Parameter ist nicht verwendet und muss auf NULL festgelegt werden.

  • Der pszModule-Parameter verweist auf eine optionale ANSI-Zeichenfolge mit NULL-Beendigung, die den Namen einer Bibliothek angibt, die geladen werden soll, bevor das Arbeitselement beginnt und nach Abschluss des Arbeitselements entladen wird. Dieser Parameter kann NULL sein.

  • Der dwFlags-Parameter unterstützt nur eine Teilmenge der von QueueUserWorkItem unterstützten Werte. Die folgenden Flags werden erkannt.

    Name Wert Bedeutung
    TPS_EXECUTEIO 0x00000001 Identisch mit WT_EXECUTEINIOTHREAD.
    TPS_LONGEXECTIME 0x00000008 Identisch mit WT_EXECUTELONGFUNCTION.

     

    Hinweis

    Das TPS_LONGEXECTIME-Flag weist nicht den gleichen numerischen Wert wie das WT_EXECUTELONGFUNCTION-Flag auf. Bei Verwendung von SHQueueUserWorkItem muss der dwFlags-Parameter eine Kombination aus TPS_*-Werten und nicht WT_*-Werten sein.

     

SHQueueUserWorkItem gibt einen nonzero-Wert zurück, wenn das Arbeitselement erfolgreich in die Warteschlange gestellt wurde, andernfalls 0. Wenn die Funktion fehlschlägt, können Sie GetLastError verwenden, um zusätzliche Informationen abzurufen.

(RegisterClass)

Auf nativen ANSI-Plattformen wird keine Übersetzung für das lpfnWndProc-Element der WNDCLASSW-Struktur durchgeführt. Das Fenster empfängt ANSI-Fenstermeldungen auf nativen ANSI-Plattformen und Unicode-Fenstermeldungen auf nativen Unicode-Plattformen. Die Fensterprozedur muss für beide Fälle vorbereitet sein. Die MSLU hat diese Einschränkungen nicht.

(RegQueryValueExW)

RegQueryValueExWrapW wurde auch unter dem Namen RegQueryValueExW aufgerufen. Wie bei jeder nicht benannten Funktion, die streng von ordinal exportiert wird, können Sie den Namen auswählen, unter dem die Funktion in Ihrem Code bekannt ist.

(SendMessage)

Auf nativen Unicode-Plattformen leitet die SendMessageWrapW-Funktion an die SendMessageW-Funktion weiter. Auf nativen ANSI-Plattformen bietet SendMessageWrapW nur eingeschränkte Unterstützung für die Übersetzung von Unicode-Nachrichten in ANSI. Die Liste der unterstützten Nachrichten ist in der folgenden Tabelle aufgeführt. Die Funktion übersetzt keine anderen Nachrichten.

Die MSLU hat diese Einschränkungen nicht.

`Message` BESCHREIBUNG
CB_ADDSTRING b) Buchstabe f) Buchstabe c
CB_FINDSTRING b) Buchstabe f) Buchstabe c
CB_FINDSTRINGEXACT a) Buchstabe f) Buchstabe c
CB_GETLBTEXT (b) (f) (c) (o) Der im lParam-Parameter übergebene Puffer muss Platz für mindestens 256 Zeichen haben.
CB_GETLBTEXTLEN a)
CB_INSERTSTRING b) Buchstabe f) Buchstabe c
CB_SELECTSTRING b) Buchstabe f) Buchstabe c
EM_CHARFROMPOS
EM_GETLINE (e) Der Rückgabewert ist die Anzahl der kopierten ANSI-Zeichen.
EM_GETSEL
EM_REPLACESEL b) Buchstabe f
EM_SETPASSWORDCHAR a)
EM_SETSEL
EM_SETWORDBREAKPROC Diese Nachricht hat keine Auswirkung. Die Wortumbruchprozedur ist nicht festgelegt.
LB_ADDSTRING b) Buchstabe f) Buchstabe d)
LB_FINDSTRING b) Buchstabe f) Buchstabe d)
LB_FINDSTRINGEXACT b) Buchstabe f) (lbs)
LB_GETTEXT (b) (f) (lbs) (o) Der im lParam-Parameter übergebene Puffer muss Platz für mindestens 256 Zeichen haben.
LB_GETTEXTLEN a)
LB_INSERTSTRING b) Buchstabe f) Buchstabe d)
LB_SELECTSTRING b) Buchstabe f) Buchstabe d)
WM_GETTEXT b) Buchstabe f
WM_GETTEXTLENGTH a)
WM_SETTEXT b) Buchstabe f
WM_SETTINGCHANGE (a) Die Nachricht wird mit einem Timeout von drei Sekunden gesendet.

 

  • a) Die gemessene oder abgerufene ANSI-Zeichenfolge muss die folgende Bedingung erfüllen: Die Länge der entsprechenden Unicode-Version der Zeichenfolge darf die Länge der ANSI-Version der Zeichenfolge nicht überschreiten. Wenn diese Bedingung nicht erfüllt ist, ist die zurückgegebene Länge kurz. Wenn nicht genügend Arbeitsspeicher vorhanden ist, um die Länge der Unicode-Zeichenfolge zu bestimmen, gibt die Funktion null zurück, nicht wie erwartet LB_ERR oder CB_ERR.

  • (b) Wenn eine Zeichenfolgenkonvertierung erforderlich ist, werden alle Zeichenfolgen über die CP_ACP Codepage konvertiert.

    Diese Funktion verwendet am besten geeignete Zeichen und führt beim Konvertieren von Unicode in ANSI keine Standardüberprüfung durch. Wenn die Zeichenfolge nicht von Unicode in ANSI konvertiert werden kann, übergibt die Funktion außerdem eine NULL-Zeichenfolge an die zugrunde liegende ANSI-Funktion. Dies kann beispielsweise auftreten, wenn nicht genügend Arbeitsspeicher vorhanden ist. Das Übergeben einer NULL-Zeichenfolge kann dazu führen, dass einige Funktionen mit einem ungültigen Parameterfehler fehlschlagen, aber andere Funktionen akzeptieren die NULL-Zeichenfolge und behandeln sie als den beabsichtigten Parameter. Wenn beispielsweise ein Fehler auftritt, wenn der WM_SETTEXT Wrappers versucht, den Fenstertitel in ANSI zu konvertieren, weist das Fenster eine leere Untertitel auf. Die Funktion benachrichtigt Sie nicht, wenn diese Probleme auftreten. Die MSLU hat diese Einschränkungen nicht.

  • (c) Das angegebene Fensterhandle muss das Handle für ein ComboBox- oder ComboBoxEx-Steuerelement sein. Wenn es sich beim Handle um ein Kombinationsfeldsteuerelement handelt, das besitzerziehend ist und nicht mit dem Format Listenfeldformatvorlagen erstellt wurde, schlägt die Übersetzung dieser Nachricht fehl und kann sogar abstürzen.

  • (d) Das angegebene Fensterhandle muss das Handle für ein Listbox-Steuerelement sein. Wenn das Listenfeld besitzergezeichnet ist und nicht mit der Formatvorlage Listenfeldstile erstellt wurde, schlägt die Übersetzung dieser Nachricht fehl und kann sogar abstürzen.

  • (e) Wenn eine Zeichenfolgenkonvertierung erforderlich ist, werden alle Zeichenfolgen über die CP_ACP Codepage konvertiert.

    Beim Konvertieren von ANSI in Unicode für die Ausgabe kürzen die Wrapperfunktionen die zurückgegebene Zeichenfolge ab, wenn sie nicht in den bereitgestellten Puffer passt. Der Rückgabewert für Funktionen, die die Anzahl der in den Puffer kopierten Zeichen oder die Anzahl der Zeichen zurückgeben, die zur Vermeidung von Abschneiden erforderlich sind, bezieht sich auf die Anzahl von ANSI-Zeichen, die in den Puffer kopiert oder von der zugrunde liegenden ANSI-Funktion benötigt werden, nicht auf die Anzahl der Unicode-Zeichen, die in den Puffer kopiert wurden, der von der aufrufenden Anwendung, die die Wrapperfunktion aufgerufen hat, bereitgestellt oder von der aufrufenden Anwendung benötigt wird. Die MSLU hat diese Einschränkung nicht. Weitere Informationen finden Sie unter Microsoft Layer for Unicode unter Windows 95/98/Me Systems.

(SetTimerQueueTimer)

Die SHSetTimerQueueTimer-Funktion unterscheidet sich geringfügig von der entsprechenden CreateTimerQueueTimer-Funktion . Die Syntax ist wie folgt:

HANDLE SHSetTimerQueueTimer(HANDLE hQueue,
                        WAITORTIMERCALLBACK pfnCallback,
                        LPVOID pContext,
                        DWORD dwDueTime,
                        DWORD dwPeriod,
                        LPCSTR lpszLibrary,
                        DWORD dwFlags);

Die Parameter sollten wie folgt festgelegt werden:

  • Der hQueue-Parameter muss auf NULL festgelegt werden, wobei die Standardtimerwarteschlange angegeben wird.

  • Die Parameter pfnCallback, pContext, dwDueTime und dwPeriod haben die gleiche Bedeutung wie die Parameter Callback, Parameter, DueTime und Period von CreateTimerQueueTimer.

  • Der lpszLibrary-Parameter wird nicht verwendet und muss auf NULL festgelegt werden.

  • Der Flags-Parameter unterstützt nur eine Teilmenge der von CreateTimerQueueTimer unterstützten Werte.

    Name Wert Bedeutung
    TPS_EXECUTEIO 0x00000001 Identisch mit WT_EXECUTEINIOTHREAD
    TPS_LONGEXECTIME 0x00000008 Identisch mit WT_EXECUTELONGFUNCTION

     

    Hinweis

    Das TPS_LONGEXECTIME-Flag weist nicht den gleichen numerischen Wert wie das WT_EXECUTELONGFUNCTION-Flag auf. Bei Verwendung von SHSetTimerQueueTimer muss der dwFlags-Parameter eine Kombination aus TPS_*-Werten und nicht WT_*-Werten sein.

     

SHSetTimerQueueTimer gibt das Handle des erstellten Timers bei Erfolg und andernfalls NULL zurück.

(ShellExecuteEx)

Das lpFile-Element der SHELLEXECUTEINFO-Struktur , das im einzigen Parameter dieser Funktion übergeben wird, darf INTERNET_MAX_URL_LENGTH Zeichen nicht überschreiten. Wenn das flag SEE_MASK_CLASSNAME weggelassen wird, muss das lpClass-Element mit NULL initialisiert werden.

(ValueEx)

Es werden nur die folgenden Registrierungsdatentypen unterstützt: REG_SZ, REG_EXPAND_SZ, REG_BINARY und REG_DWORD. Im Gegensatz zu diesen Wrapperfunktionen unterstützt die MSLU auch REG_MULTI_EXPAND_SZ.

(WindowLong)

Auf nativen ANSI-Plattformen führt die Funktion keine Übersetzung für eine der Fenster longs durch. Wenn Sie beispielsweise GWLP_WNDPROC übergeben, gibt die Funktion die ANSI-Fensterprozedur und nicht einen Thunk zurück. Die MSLU hat diese Einschränkungen nicht.