Windows 8 ARM,A.K.A。 “Windows RT”可以为第三方开发人员提供Winapi(win32)吗?

时间:2011-11-24 09:36:55

标签: winapi api arm windows-8

Windows 8 for ARM,也称为Windows RT,是否具有与Win32 API相同的功能?

(我意味着它是否可以运行Win32 x86代码,但是如果它有可用的Win32 API 到第三方开发人员。)

3 个答案:

答案 0 :(得分:11)

是的,ARM版本将支持与x86和x64版本相同的API,可能在特定于体系结构的内容(如异常处理)方面略有不同。

例如,以下是msvcrt110.dll的ARM版本从kernel32导入的API列表:

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/

答案 1 :(得分:3)

正如Igor Skochinsky指出的那样,Windows RT(几乎)与Windows版x86相同的Win32 API。如果您使用C ++和WinRT编写“Metro”应用程序,您应该可以根据需要调用这些函数。但是,您无法将此类应用程序放入Windows应用商店,因为它很可能无法通过自动化测试。您只能在“开发人员许可”下运行它,这是一种特殊的开发模式,允许您将应用程序侧载到您的设备上。 (免责声明:这是基于我在Windows 8 for x86上的实验,以及我读过的文档。我没有在实际的Surface RT上尝试过这个。可能还有其他的块阻止你的应用程序运行。)< / p>

此外,您无法在Windows RT上运行自己的桌面应用程序,因为Windows会检查可执行文件的签名,并且只有在Microsoft签名时才会运行它。 (通过Jailbraking,或通过自签名你的可执行文件,可能会解决这个问题。我已经打开了a question on that topic,顺便说一句。)

答案 2 :(得分:0)

没有。或者更确切地说,是的,但不是我们所知道的,Win32。 Win32的一小部分可供WinRT应用程序使用,而WinRT应用程序是唯一可以在Windows RT上运行的应用程序。 (“Windows 8 for ARM。”)

第三方应用开​​发者只能访问经典Win32 API的一小部分。