Visual c++ 本地c++;dll在Windows应用商店应用程序中运行时检测 我正在编写一个C++共享库,它需要在标准的Win32应用程序和Windows商店应用程序中工作。

Visual c++ 本地c++;dll在Windows应用商店应用程序中运行时检测 我正在编写一个C++共享库,它需要在标准的Win32应用程序和Windows商店应用程序中工作。,visual-c++,windows-store-apps,Visual C++,Windows Store Apps,但是,对于特定的代码位,我需要知道DLL是否加载到Windows应用商店应用程序中,以便以适当的方式创建临时文件 我知道有几种编译时检查使用的代码,如#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)等,但有没有办法在运行时进行此检查?如果要在DLL中使用Win32 DESKTOP API,则无法在运行时进行检查。WACK Windows应用商店提交工具检查所有EXE和DLL的导出和导入,并且将无法使用不在Windows应用商店API分区中

但是,对于特定的代码位,我需要知道DLL是否加载到Windows应用商店应用程序中,以便以适当的方式创建临时文件


我知道有几种编译时检查使用的代码,如
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
等,但有没有办法在运行时进行此检查?

如果要在DLL中使用Win32 DESKTOP API,则无法在运行时进行检查。WACK Windows应用商店提交工具检查所有EXE和DLL的导出和导入,并且将无法使用不在Windows应用商店API分区中的API

您应该阅读本文,以获得处理此类多目标问题的建议

理想情况下,您可以让Windows应用商店的大部分DLL代码“按原样”工作,然后可以在Win32桌面版本中使用相同的代码,但您可能还担心操作系统的“底层”版本,这在某些情况下需要使用Win32 WINNT版本保护。例如,不能在Windows应用商店中使用CreateFile,也不能在Windows 7上使用CreateFile2

 #if (_WIN32_WINNT >= 0x0602)
 HANDLE hFile = CreateFile2( szFile, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr );
 #else
 HANDLE hFile = CreateFile( szFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, nullptr );
 #endif
 if ( !hFile )
 {
     return HRESULT_FROM_WIN32( GetLastError() );
 }
或者,您可以使用诸如fopen_s之类的CRT函数来抽象这一点

您可以查看并作为代码示例,使用这些技术为Windows 8.0的Windows应用商店、Windows 8.1的Windows应用商店、Windows Phone 8.0、Windows Phone 8.1和Xbox One以及Windows 8.x、Windows 7和Windows Vista的Win32 desktop构建代码

还要记住,Windows应用商店应用程序有严格的CRT要求。适用于Windows 8.0的Windows应用商店应用程序必须使用VS 2012 CRT,适用于Windows 8.1的Windows应用商店应用程序必须使用VS 2013 CRT

通用Windows平台应用程序与Windows应用商店类似,但又添加了一些API,并为旧版Windows桌面功能提供了一些新的替代方案。您必须使用VS 2015 CRT,特别是