Does Windows 8 ARM, A.K.A. “Windows RT” have the Winapi (win32) available for third party developers?
适用于ARM的Windows 8,也称为Windows RT,是否具有Win32 API的等效功能?
(我不是说它是否可以运行Win32 x86代码,而是要它具有可供第三方开发人员使用的Win32 API。)
是的,ARM版本将支持与x86和x64构建相同的API,在诸如异常处理之类的特定于体系结构的东西上可能略有不同。
例如,这是ARM版本的msvcrt110.dll从kernel32导入的API的列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | Setting environment for using Microsoft Visual Studio 2010 x86 tools. Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file arm_msvcr110d_win8.pe File Type: DLL Section contains the following imports: KERNEL32.dll 100E4000 Import Address Table 1012DA80 Import Name Table 0 time date stamp 0 Index of first forwarder reference 108 DecodePointer 12E EncodePointer 498 RtlPcToFileHeader 425 RaiseException 269 GetModuleFileNameA 26A GetModuleFileNameW 1AA FreeEnvironmentStringsW 26D GetModuleHandleExW 2A1 GetProcAddress 160 ExitProcess 3C7 MultiByteToWideChar 258 GetLastError 26E GetModuleHandleW 2C4 GetStdHandle 5C1 WriteFile 1D3 GetCommandLineA 1D4 GetCommandLineW 19D FlsGetValue 19E FlsSetValue 21A GetCurrentThreadId [...] 4B1 SetConsoleCtrlHandler 361 IsDebuggerPresent 2F7 GetTickCount64 3F0 OutputDebugStringA 38C LCMapStringA 232 GetEnvironmentVariableA 233 GetEnvironmentVariableW 36E IsValidLocaleName 38D LCMapStringEx 339 HeapReAlloc 33B HeapSize 338 HeapQueryInformation |
如您所见,所有这些都是标准的Win32东西。
另请参见http://getwired.com/2011/09/20/win32-the-reports-of-my-death-are-greatly-exaggerated/
正如Igor Skochinsky指出的那样,Windows RT具有(几乎)与Windows x86相同的Win32 API。如果您使用C ++和WinRT编写"地铁"应用程序,则应该可以随意调用这些函数。但是,您无法将这样的应用程序带入Windows应用商店,因为它很可能无法通过自动测试。您只能在"开发者许可"下运行它,这是一种特殊的开发模式,允许您将应用程序侧面加载到设备上。 (免责声明:这是基于我对x86的Windows 8的实验以及我阅读的文档。我没有在实际的Surface RT上尝试过此操作。可能还有其他阻止应用程序运行的功能块。)
另外,您不能在Windows RT上运行自己的桌面应用程序,因为Windows会检查可执行文件的签名,并且只有在Microsoft签名的情况下才运行该签名。 (可能有办法解决这一问题,要么通过越狱,要么通过对可执行文件进行自我签名。关于这个话题,我已经提出了一个问题,顺便说一句。)
否。或者,是的,但不是我们所知道的Win32。 WinRT应用程序可以使用Win32的一小部分,而WinRT应用程序是唯一可以在Windows RT上运行的东西。 (" Windows 8 for ARM。")
第三方应用程序开发人员只能访问经典Win32 API的一小部分。