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 geändert oder nicht verfügbar Windows.]
Die Tabellen in diesem Dokument listen Wrapperfunktionen von Shlwapi.dll auf, die eingeschränkte Unicode-Funktionen auf Windows 95, Windows 98 und Windows Editionsversion (Windows Me) bereitstellen.
Windows 95, Windows 98 und Windows 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 Forwards To auf. AppendMenuWrapW ruft beispielsweise AppendMenuA auf. Dies ist die ANSI-Version von AppendMenu. Die anderen Funktionen folgen dem gleichen 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" angegeben 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 ereignisse mit unterschiedlichen Namen zu erstellen, deren Namen nach der Konvertierung von Unicode in ANSI übereinstimmen, gibt der zweite Aufruf ein Handle für dasselbe Ereignis wie beim ersten Aufruf zurück, obwohl sich die ursprünglichen Unicode-Zeichenfolgen unterscheiden.
Microsoft Windows NT, Windows 2000, Windows XP, Windows Server 2003 und höher werden hier als "native Unicode-Plattformen" bezeichnet. In den meisten Teilen werden diese Wrapperfunktionen auf nativen Unicode-Plattformen einfach Eingabezeichenfolgenparameter an die Unicode-Version der Funktion in der Spalte Forwards To (Weitergeleitet an) weitergeleitet. Beispielsweise wird AppendMenuWrapW an AppendMenuW weitergeleitet. Dies ist die Unicode-Version von AppendMenu. Die anderen Funktionen folgen dem gleichen 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" angegeben 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 Sicherheitsprobleme, die für die Funktionen in der Spalte Forwards To (Weiter an) angegeben sind, gelten auch für die entsprechenden Wrapperfunktionen. Weitere Informationen finden Sie in der Referenzdokumentation für die Funktion in der Spalte "Forwards To".
Die Wrapperfunktionen in dieser Tabelle sind alle in Shlwapi.dll. Um sie aufrufen zu können, müssen Sie die in der Tabelle aufgeführte Ordnungszahl verwenden.
Hinweis
Diese Wrapperfunktionen sind unter Windows XP verfügbar, bieten jedoch keine Wrapperfunktionen in Windows XP Service Pack 2 (SP2) und höher. Außerdem bieten sie keine Wrapperfunktionen in Windows Server 2003. Sie sollten stattdessen die funktionen verwenden, die in der Spalte Forwards To aufgeführt sind.
| Funktion | Ordinal | Weitergeleitet an | DLL | Bemerkungen |
|---|---|---|---|---|
| AppendMenuWrapW | 36 | AppendMenu | USER32 | (a), (f), (Menü) |
| CallWindowProcWrapW | 37 | CallWindowProc | USER32 | (i) |
| CharLowerWrapW | 38 | CharLower | Kernel32.dll | (e) |
| CharUpperBufWrapW | 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) |
| DefWindowProcWrapW | 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) |
| GetDateFormatWrapW | 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) |
| GetModuleFileNameWrapW | 80 | GetModuleFileName | Kernel32.dll | (c), (g) |
| GetModuleHandleWrapW | 83 | GetModuleHandle | Kernel32.dll | (c), (g) |
| GetObjectWrapW | 84 | Getobject | GDI32 | (g) |
| GetOpenFileNameWrapW | 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) |
| GetWindowTextWrapW | 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) |
| RegCreateKeyExWrapW | 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) |
| UnregisterClassWrapW | 147 | UnregisterClass | USER32 | (a) |
Die Wrapperfunktionen in der folgenden Tabelle führen keine Zeichensatzkonvertierung durch. Stattdessen bieten sie eingeschränkte Unterstützung für Betriebssystemfeatures, die auf früheren Plattformen nicht verfügbar sind.
| Funktion | Ordinal | Weiterleitung 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 keine Standardüberprüfung durch, wenn sie von Unicode in ANSI konvertiert werden. 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 Fehler aufgrund eines ungültigen Parameters fehlschlagen, aber andere Funktionen akzeptieren die NULL-Zeichenfolge und behandeln sie als beabsichtigten Parameter. Beispielsweise tritt ein Fehler auf, wenn die CreateWindowExWrapW-Funktion versucht, den lpWindowName-Parameter in ANSI zu konvertieren, und CreateWindowEx ein Fenster mit einer leeren Beschriftung erstellt. Der Wrapper benachrichtigt Sie nicht, wenn diese Probleme aufgetreten sind.
Die Microsoft Layer for Unicode (MSLU) überprüft während der Konvertierung von Unicode in ANSI auf Fehler und gibt entsprechende Fehlerwerte zurück. Beispielsweise gibt die AppendMenu-Wrapperfunktion in der MSLU 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 "Forwards To" enthält, erst vom Shlwapi.dll geladen wird, wenn eine Funktion in dieser DLL aufgerufen wird. Der linker Microsoft Visual C++ 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 Dateisystem-Spoofingangriffen führen. Darüber hinaus kann während der Konvertierung von Unicode in ANSI ein automatischer Datenverlust auftreten.
Für die MSLU gelten diese Einschränkungen nicht.
(d)
Wenn für die gezeichnete Zeichenfolge ein Zeichensatz erforderlich ist, der nicht in der Schriftart verfügbar ist, die im Gerätekontext ausgewählt ist, verwenden diese Wrapperfunktionen das Feature "Schriftartverknüpfung" der MLang-Bibliothek, um jedes Zeichen in einer geeigneten Schriftart zu rendern. Im Gegensatz zu den meisten anderen Wrapperfunktionen funktionieren diese zusätzlich zu nativen ANSI-Plattformen auf Microsoft Windows NT 4.0.
(e)
Vollständige Unicode-Implementierungen dieser Funktionen sind auf nativen ANSI-Plattformen verfügbar. Diese Funktionen rufen nicht die zugehörige ANSI-Funktion auf.
(f)
Wenn die Benutzerstandard-UI-Sprache einen anderen Zeichensatz als die Standardsprache der Benutzeroberfläche verwendet, versucht das System, Dialogvorlagen und Unterklassensteuerelemente neu zu schreiben und Menüelemente in owner-draw zu konvertieren, sodass Zeichenfolgen in der Benutzerstandard-UI-Sprache weiterhin ordnungsgemäß angezeigt werden. Die einzigen Steuerelemente, die von den Regeln für das erneute Schreiben von Dialogfeldvorlagen unterstützt werden, sind statische Steuerelemente, Schaltflächen-, Listenfeld- und Combobox-Steuerelemente. Diese Steuerelemente sind so untergliedert, dass die SendMessageWrapW-Funktion die ursprüngliche Unicode-Zeichenfolge abrufen kann, ohne durch den ANSI-Zeichensatz übersetzt zu werden. Im Gegensatz zu den meisten anderen Wrapperfunktionen funktionieren diese sowohl auf Microsoft Windows NT 4.0 als auch auf nativen ANSI-Plattformen. In den Hinweisen in der Dokumentation der MLLoadLibrary-Funktion wird näher erläutert, wie die Benutzerstandard-UI-Sprache und die Systemstandard-UI-Sprache bestimmt werden.
(g)
Wenn eine Zeichenfolgenkonvertierung erforderlich ist, werden alle Zeichenfolgen über die CP _ ACP-Codepage konvertiert.
Wenn beim Konvertieren von ANSI in Unicode für die Ausgabe die zurückgegebene Zeichenfolge nicht in den bereitgestellten Puffer passt, werden die Zeichenfolgen von den Wrapperfunktionen abgeschnitten. Funktionen, die die Anzahl der in den Puffer kopierten Zeichen oder die Anzahl der Zeichen zurückgeben, die erforderlich sind, um abgeschnittene Zeichen zu vermeiden, geben nicht die Anzahl der Unicode-Zeichen zurück, die in den Puffer kopiert werden, 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. Für die MSLU gelten diese Einschränkungen nicht.
(h)
Auf Systemen vor Windows XP implementieren diese Funktionen einen vereinfachten Threadpool und eine vereinfachte Timerwarteschlange. Auf Windows XP und höher verwenden diese Funktionen den Systemthreadpool und die Systemzeitgeberwarteschlange. Für die Zeitgeber-Warteschlangenfunktionen muss der hQueue-Parameter auf NULL festgelegt werden, um anzugeben, dass der Vorgang für die Standardzeitgeberwarteschlange ausgeführt werden soll.
(i)
Auf Unicode-Plattformen übersetzen diese Funktionen die Nachricht aus Unicode in ANSI, wenn das Zielfenster ANSI ist. Diese Funktionen führen keine Nachrichtenübersetzung auf nativen ANSI-Plattformen durch. Daher muss durch aufrufende Anwendungen, die diese Funktion aufrufen, sichergestellt werden, dass die Nachricht auf Unicode-Plattformen im Unicode-Format und auf ANSI-Plattformen im ANSI-Format vorliegt. Im folgenden Funktionsaufruf muss das wParam beispielsweise ein Unicode-Codepunkt sein, wenn das Programm auf einer Unicode-Plattform ausgeführt wird, und 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. Für die MSLU gelten 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)
Beachten Sie, dass auf nativen ANSI-Plattformen beide Zeichenfolgen in ANSI konvertiert und als ANSI-Zeichenfolgen verglichen werden. Wenn die Unicode-Zeichenfolgen Zeichen enthalten, die nicht in ANSI 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 verglichen, da sie beide der ANSI-Zeichenfolge "?" zugeordnet sind.
(DateTime)
In Shlwapi.dll Version 5.0, die mit Windows 2000 ausgeliefert wurde, muss die Codepage des Gebietsschemabezeichners, den 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 Version 5.5 oder höher. Dies bedeutet, dass Windows XP- und höher-Systeme dieser Einschränkung nicht unterliegen. Für die MSLU gilt diese Einschränkung nicht.
(DialogBoxParam)
Der lpTemplateName-Parameter für die DialogBoxParamWrapW-Funktion darf keine Zeichenfolge sein. Es muss sich um eine Ordnungszahl handelt, die vom MAKEINTRESOURCE-Makro erstellt wird. Die vom 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. Für die MSLU gelten diese Einschränkungen nicht.
(ExtTextOut)
Native ANSI-Plattformen implementieren die ExtTextOutW-Funktion sowie native Unicode-Plattformen. Der Zweck von ExtTextOutWrapW besteht darin, Schriftartverknüpfungen durchzuführen, wie in einer separaten Anmerkung beschrieben.
(DragQueryFile)
Mit der DragQueryFileWrapW-Funktion können Sie die Länge einer Datei im Drop-Handle nicht abfragen, indem Sie NULL als lpszFile-Parameter übergeben. Für die MSLU gelten diese Einschränkungen nicht.
(FormatMessage)
Auf nativen ANSI-Plattformen werden die Formate in der Zeichenfolge nicht aus Unicode in ANSI konvertiert. Das folgende Codebeispiel ist beispielsweise fehlerhaft.
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 "!s!" verwendet. akzeptiert. 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. Ebenso 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 ordnungsgemäß gedruckt.
Die Funktion unterstützt "%0" nicht. Spezielle Formatzeichenfolge.
Für die MSLU gelten diese Einschränkungen nicht.
(GetClassInfo)
Auf nativen ANSI-Plattformen werden die Member 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. Für die MSLU gelten diese Einschränkungen nicht.
(Menü)
In Shlwapi.dll Version 5.0, die mit Windows 2000 ausgeliefert wurde, werden Menüelementzeichenfolgen, die Tabstoppzeichen (t) enthalten, \ möglicherweise nicht ordnungsgemäß angezeigt. Diese Einschränkung gilt nicht für Shlwapi.dll Version 5.5 oder höher. Dies bedeutet, dass Windows XP- und höher-Systeme dieser Einschränkung nicht unterliegen. Für die MSLU gilt diese Einschränkung nicht.
(MenuItemInfo)
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. Für die MSLU gelten diese Einschränkungen nicht.
(OpenFileName)
Der cbSize-Member der OPENFILENAMEW-Struktur muss auf sizeof(OPENFILENAME _ NT4W) festgelegt werden.
Der lpstrCustomFilter-Member der OPENFILENAMEW-Struktur muss auf NULL festgelegt werden.
Die Werte der Member nMaxFile und nMaxFileTitle der OPENFILENAMEW-Struktur dürfen MAX PATH nicht _ überschreiten.
Wenn der lpfnHook-Member der OPENFILENAMEW-Struktur nicht NULL ist, muss er auf eine ANSI-Hookprozedur auf nativen ANSI-Plattformen und eine Unicode-Hookprozedur auf nativen Unicode-Plattformen verweisen.
Für die MSLU gelten diese Einschränkungen nicht.
(PeekMessage und PostMessage)
Auf nativen ANSI-Plattformen wird keine Übersetzung für die übertragene oder abgerufene Nachricht ausgeführt. Die übertragene/abgerufene Nachricht ist ANSI auf nativen ANSI-Plattformen und Unicode auf nativen Unicode-Plattformen. Die aufrufende Anwendung muss darauf vorbereitet sein, beide Fälle zu verarbeiten. Wenn die abgerufene Nachricht z. B. WM _ CHAR ist, ist die wParam ein ANSI-Zeichencode auf nativen ANSI-Plattformen, aber es handelt sich um einen Unicode-Codepunkt auf nativen Unicode-Plattformen. Für die MSLU gelten 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 wird nicht verwendet und muss auf 0 festgelegt werden.
Der pdwld-Parameter wird nicht verwendet und muss auf NULL festgelegt werden.
Der pszModule-Parameter verweist auf eine optionale NULL-terminierte ANSI-Zeichenfolge, 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 Werte, die von QueueUserWorkItemunterstützt werden. Die folgenden Flags werden erkannt.
Name Wert Bedeutung TPS _ EXECUTEIO 0x00000001 Identisch mit WT _ EXECUTEINIOTHREAD. TPS _ LONGEXECTIME 0x00000008 Identisch mit WT _ EXECUTELONGFUNCTION. Hinweis
Das FLAG TPS _ LONGEXECTIME 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 Wert ungleich 0 (null) zurück, wenn das Arbeitselement erfolgreich in die Warteschlange eingereiht 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 den lpfnWndProc-Member der WNDCLASSW-Struktur ausgefü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. Für die MSLU gelten diese Einschränkungen nicht.
(RegQueryValueExW)
RegQueryValueExWrapW wurde auch unter dem Namen RegQueryValueExW aufgerufen. Wie jede unbenannte Funktion, die ausschließlich nach Ordnungszahl exportiert wird, können Sie den Namen auswählen, unter dem die Funktion im Code bekannt ist.
(SendMessage)
Auf nativen Unicode-Plattformen leitet die SendMessageWrapW-Funktion an die SendMessageW-Funktion weiter. Auf nativen ANSI-Plattformen bietet SendMessageWrapW eingeschränkte Unterstützung für die Übersetzung von Unicode-Nachrichten in ANSI. Die Liste der unterstützten Nachrichten ist in der folgenden Tabelle angegeben. Die Funktion übersetzt keine anderen Nachrichten.
Für die MSLU gelten diese Einschränkungen nicht.
Message |
BESCHREIBUNG |
|---|---|
| CB _ ADDSTRING | (b) (f) (c) |
| CB _ FINDSTRING | (b) (f) (c) |
| CB _ FINDSTRINGEXACT | (a) (f) (c) |
| CB _ GETLBTEXT | (b) (f) (c) (o) Der im lParam-Parameter übergebene Puffer muss über Platz für mindestens 256 Zeichen verfügen. |
| CB _ GETLBTEXTLEN | (a) |
| CB _ INSERTSTRING | (b) (f) (c) |
| CB _ SELECTSTRING | (b) (f) (c) |
| EM _ CHARFROMPOS | |
| EM _ GETLINE | (e) Der Rückgabewert ist die Anzahl der kopierten ANSI-Zeichen. |
| EM _ GETSEL | |
| EM _ REPLACESEL | (b) (f) |
| EM _ SETPASSWORDCHAR | (a) |
| EM _ SETSEL | |
| EM _ SETWORDBREAKPROC | Diese Meldung hat keine Auswirkungen. Die Wörterbruchprozedur ist nicht festgelegt. |
| LB _ ADDSTRING | (b) (f) (d) |
| LB _ FINDSTRING | (b) (f) (d) |
| LB _ FINDSTRINGEXACT | (b) (f) (lbs) |
| LB _ GETTEXT | (b) (f) (lbs) (o) Der im lParam-Parameter übergebene Puffer muss über Platz für mindestens 256 Zeichen verfügen. |
| LB _ GETTEXTLEN | (a) |
| LB _ INSERTSTRING | (b) (f) (d) |
| LB _ SELECTSTRING | (b) (f) (d) |
| WM _ GETTEXT | (b) (f) |
| WM _ GETTEXTLENGTH | (a) |
| WM _ SETTEXT | (b) (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 0 (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 passende Zeichen und führt keine Standardüberprüfung durch, wenn sie von Unicode in ANSI konvertiert wird. Darüber hinaus übergibt die Funktion eine NULL-Zeichenfolge an die zugrunde liegende ANSI-Funktion, wenn die Zeichenfolge nicht von Unicode in ANSI konvertiert werden kann. Dies kann beispielsweise auftreten, wenn nicht genügend Arbeitsspeicher verfügbar ist. Das Übergeben einer NULL-Zeichenfolge kann dazu führen, dass bei einigen Funktionen ein Fehler mit ungültigen Parametern auftritt. Andere Funktionen akzeptieren jedoch die NULL-Zeichenfolge und behandeln sie als den beabsichtigten Parameter. Wenn beispielsweise ein Fehler auftritt, wenn der WM SETTEXT-Wrapper versucht, den Fenstertitel in ANSI zu konvertieren, hat das Fenster eine _ leere Beschriftung. Die Funktion benachrichtigt Sie nicht, wenn diese Probleme auftreten. Die MSLU verfügt nicht über diese Einschränkungen.
(c) Das angegebene Fensterhand handle muss das Handle für ein ComboBox- oder ComboBoxEx-Steuerelement sein. Wenn das Handle zu einem Kombinationsfeld-Steuerelement gehört, das owner-draw ist und nicht mit dem Stil List Box Styles erstellt wurde, kann die Übersetzung dieser Meldung fehlschlagen und sogar abstürzen.
(d) Das angegebene Fensterhand handle muss das Handle für ein Listbox-Steuerelement sein. Wenn das Listenfeld owner-draw ist und nicht mit dem Stil List Box Styles (Listenfeldstile) erstellt wurde, kann die Übersetzung dieser Nachricht fehlschlagen und 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 schneiden 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 zurückgeben, oder die Anzahl der Zeichen, die zur Vermeidung von Kürzungen erforderlich sind, bezieht sich auf die Anzahl der ANSI-Zeichen, die in den Puffer kopiert oder von der zugrunde liegenden ANSI-Funktion benötigt werden, und nicht auf die Anzahl der Unicode-Zeichen, die in den Puffer kopiert werden, der von der aufrufenden Anwendung bereitgestellt wird oder von der aufrufenden Anwendung benötigt wird, die die Wrapperfunktion aufgerufen hat. Die MSLU verfügt nicht über diese Einschränkung. Weitere Informationen finden Sie unter Microsoft Layer for Unicode on Windows 95/98/Me Systems.
(SetTimerQueueTimer)
Die SHSetTimerQueueTimer-Funktion ist etwas anders als die entsprechende 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, und die Standard-Timerwarteschlange wird angegeben.
Die Parameter pfnCallback, pContext, dwDueTime und dwPeriod haben die gleiche Bedeutung wie die Callback-, Parameter-, DueTime- bzw. Period-Parameter von CreateTimerQueueTimer.
Der lpszLibrary-Parameter wird nicht verwendet und muss auf NULL festgelegt werden.
Der Flags-Parameter unterstützt nur eine Teilmenge der Werte, die von CreateTimerQueueTimer unterstützt werden.
Name Wert Bedeutung TPS _ EXECUTEIO 0x00000001 Identisch mit WT _ EXECUTEINIOTHREAD TPS _ LONGEXECTIME 0x00000008 Identisch mit WT _ EXECUTELONGFUNCTION Hinweis
Das TPS _ LONGEXECTIME-Flag hat nicht denselben numerischen Wert wie das WT _ EXECUTELONGFUNCTION-Flag. Bei Verwendung von SHSetTimerQueueTimer muss der dwFlags-Parameter eine Kombination aus TPS-Werten _ * und nicht aus WT-Werten _ * sein.
SHSetTimerQueueTimer gibt das Handle des erstellten Timers bei Erfolg und andernfalls NULL zurück.
(ShellExecuteEx)
Der lpFile-Member der SHELLEXECUTEINFO-Struktur, der im einzigen Parameter dieser Funktion übergeben wird, darf internet _ max URL _ _ LENGTH-Zeichen nicht überschreiten. Wenn das FLAG SEE _ MASK _ CLASSNAME weggelassen wird, muss der lpClass-Member 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 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 _ PROZEDUR DES ANSI-Fensters und keinen Thunk zurück. Die MSLU verfügt nicht über diese Einschränkungen.