![]() |
Namenskonventionen bei API-Calls?
Neue Frage, neuer Thread ;-)
Im MSDN stehen die API-Funktionen direkt beschrieben. In der DLL stehen sie - soe wie ich das jetzt herausgefunden habe - immer als FunktionsnameA und FunktionsnameW exportiert zur Verfügung. Was hat es damit auf sich? Muss ich die A oder die W nehmen oder wovon hängt dies ab. Ein bisschen Hintergrundinfo schadet dabei natrülich nie ;-) |
Re: Namenskonventionen bei API-Calls?
"*A" ist die Ansi-Charackter Version. "*W" die Unicode (WideCharackter Version). Unter Unicode Betriebssystemen vom Microsoft (NT ff.) ist die A-Version eigentlich nur eine leere Hülse in der die Zeichen nur von Ansi nach Unicode umgewandelt werden.
Aufrufen tzut man sowieso explizit keine dieser Versionen, sondern immer die Ohne "A" oder "W". Unter nicht Unicode Betriebsystemen wird dann die A-Version genommen, sofern vorhanden, wenn nicht sowieso eine Funktion diesen Namens existiert. Unter Unicode Betriebssystem, wie Windows 2000, handelt es sich dabei nur um ein in der WinUser.h definiertes Markro:
Code:
Unter Windows 200 enthält der Programmcode der A-Version lediglich eine Umwandlung der Ansi-Zeichenfolge in Unicode und den anschließenden Aufruf von der W-Version. Nach der Rückkkehr der W-Version gibt die A-Version noch die zuvor zur Umwandlung belegten Speicher wieder frei.
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW #else #define CreateWindowExA #endif // !UNICODE Ich hoffe, das ist erstmal ausführlich genung. ;) |
Re: Namenskonventionen bei API-Calls?
Zitat:
Ansonsten leuchtet mir das jetzt ein :) |
Re: Namenskonventionen bei API-Calls?
Damit scheint es sich wohl mal wieder um die MS typischen Außnahmen zuhandeln, du unser Leben als Windows Programmierer mal wieder so unheimlich interessant machen. :?
|
Re: Namenskonventionen bei API-Calls?
Moin!
In den DLLs von Windows gibt es immer nur A und W Versionen. Eine Version ohne A oder W gibt es meist nicht. Auch Delphi definiert jede A Version als den Funktionsnamen ohne A. Diese Funktionen werden von den Headern bzw. der Units von Borland bereitgestellt als Alias auf die Ansi-Version. Und für dich gilt: so lange du nicht mit WideStrings (also Unicode arbeitest), nutze die AnsiVersion. MfG Muetze1 |
Re: Namenskonventionen bei API-Calls?
Okay. Danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz