词条 | Windows函式呼叫 |
释义 | § 介绍 从Windows 1.0到Windows 3.1的16位元Windows中,MessageBox函式位於动态连结程式库USER.EXE。在Windows 3.1软体开发套件的WINDOWS.H中,MessageBox函式定义如下: § 说明 int WINAPI MessageBox(HWND, LPCSTR, LPCSTR, UINT) ; 注意,函式的第二个、第三个参数是指向常数字串的指标。当编译连结一个Win16程式时,Windows并不处理MessageBox呼叫。程式.EXE档案中的表格,允许Windows将该程式的呼叫与USER中的MessageBox函式动态连结起来。 32位的Windows(即所有版本的Windows NT,以及Windows 95和Windows 98)除了含有与16位相容的USER.EXE以外,还含有一个称为USER32.DLL的动态连结程式库,该动态连结程式库含有32位元使用者介面函式的进入点,包括32位元的MessageBox。 这就是Windows支援Unicode的关键:在USER32.DLL中,没有32位元MessageBox函式的进入点。实际上,有两个进入点,一个名为MessageBoxA(ASCII版),另一个名为MessageBoxW(宽字元版)。用字串作参数的每个Win32函式都在作业系统中有两个进入点!幸运的是,您通常不必关心这个问题,程式中只需使用MessageBox。与TCHAR表头档案一样,每个Windows表头档案都有我们需要的技巧。 下面是MessageBoxA在WINUSER.H中定义的方法。这与MessageBox早期的定义很相似: WINUSERAPI int WINAPI MessageBoxA ( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) ; 下面是MessageBoxW: WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) ; 注意,MessageBoxW函式的第二个和第三个参数是指向宽字元的指标。 如果需要同时使用并分别匹配ASCII和宽字元函式呼叫,那么您可在Windows程式中明确地使用MessageBoxA和MessageBoxW函式。但大多数程式写作者将继续使用MessageBox。根据是否定义了UNICODE,MessageBox将与MessageBoxA或MessageBoxW一样。在WINUSER.H中完成这一技巧时,程式相当琐碎: #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif 这样,如果定义了UNICODE识别字,那么程式中所有的MessageBox函式呼叫实际上就是MessageBoxW函式;否则,就是MessageBoxA函式。 执行该程式时,Windows将程式中不同的函式呼叫与不同的Windows动态连结程式库的进入点连结。虽然只有少数例外,但是,在Windows 98中不能执行Unicode版的Windows函式。虽然这些函式有进入点,但通常返回错误代码。应用程式注意这些返回的错误并采取一些合理的动作。 |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。