我们编写了一个COM进程内服务器(dll)(比如x.dll),它动态链接到使用win32 API的库(比如y.dll)。从windows8桌面应用程序和Metro应用程序启动时,我们观察到了相同win32 API的不同行为。
当从桌面应用程序加载COM进程内服务器DLL(x.dll)时,库(y.dll)中的所有win32 API都正常工作。但是当从MetroApps启动x.dll时所有的win32 API在y.dll中失败。
这是Windows8 win32 API的默认行为吗?如果有人可以提供任何与在dll中使用win32 API相关的文档,可以从桌面和MetroApps启动,那将是很好的。
谢谢
答案 0 :(得分:1)
Windows应用商店应用只能使用Windows API的一部分。每个API函数的MSDN文档指定是否可以从桌面应用程序或Windows应用商店应用程序调用该函数。例如,以下内容显示在GetProcAddress
的文档底部:
受支持的最低客户端 Windows XP [桌面应用程序| Windows应用商店应用]
可以从桌面应用程序和Windows应用商店应用程序调用此功能。如果某个功能没有说它在Windows应用商店应用中受支持,则可能无法从Windows应用商店应用调用它。例如,LoadLibrary
并未表示它可以从Windows应用商店应用调用,因此无法调用。 (请注意,虽然有办法调用不支持的函数,但这样做必然会产生未定义的行为。)
另请注意,Windows应用商店应用以低权限运行,并且限制了对系统的访问权限。