Visual studio 相当于Windows Phone上的GetTempPath

Visual studio 相当于Windows Phone上的GetTempPath,visual-studio,winapi,winrt-component,Visual Studio,Winapi,Winrt Component,我正在为Windows Universal App编译第三方库libkml。我注意到,除了WINAPI\u PARTITION\u DESKTOP之外,以下Win32 API在任何地方都不可用 以下内容来自fileapi.h: #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) WINBASEAPI DWORD WINAPI GetTempPathW( _In_ DWORD nBufferLength, _Out_writ

我正在为Windows Universal App编译第三方库libkml。我注意到,除了
WINAPI\u PARTITION\u DESKTOP
之外,以下Win32 API在任何地方都不可用

以下内容来自fileapi.h

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

WINBASEAPI
DWORD
WINAPI
GetTempPathW(
    _In_ DWORD nBufferLength,
    _Out_writes_to_opt_(nBufferLength, return + 1) LPWSTR lpBuffer
    );
... 
#endif

有人知道Windows应用商店应用程序和Windows Phone应用程序的此
GetTempPath
的等效函数吗

使用。

使用。

以下是一个示例
GetTemporaryDirectory()
包装函数,摘自以下MSDN博客文章“为Windows应用商店和Win32桌面应用编写共享代码”:


下面是一个示例
GetTemporaryDirectory()
wrapper函数,摘自以下MSDN关于“为Windows应用商店和Win32桌面应用编写共享代码”的博客文章:


你知道C++中是否有一个等价函数而不是CX/C++ + ER,我不知道。我链接到的文档提到了这一点:您可以使用“ms”访问临时应用程序数据存储中的文件-appdata:///temp/“协议。你知道C++中是否有一个等价函数而不是Cx/C++ + ER,我不知道。我链接到的文档提到了这一点:您可以使用“ms”访问临时应用程序数据存储中的文件-appdata:///temp/“协议。你好,雷米,谢谢你的例子!我希望在C++中可以得到一个等价的函数而不是CX/C++。因此,我可以简单地修补最初为旧Win32 API编写的第三方库;并将该库编译为Windows Phone或Store App DLL,最终将在Windows运行时组件中使用。但目前看来,这不是一个选择。我会再给它几个小时,看看是否有其他更好的解决方案。如果不是,这将是最好的答案。WrRT-API被暴露为C++对象作为COM对象。也许您可以使用来与它们交互。如果使用WINAPI家庭分区(WINAPI分区桌面),则预处理器指令可能应该是
@Yuchen:C++/CX是C++语言,用语言投影来简化Windows运行时的访问。虽然C++从C++ C++中提取语法,但是它编译成本地代码,非平台特定的语法与C++ 11兼容,所以你可以编译C++代码作为C++ +cx.@ Yuchen:你可能想检查一下:“编译C++时,Visual C++编译器将大多数C++ /CX构造转换成等价的C++代码。有一个顶级机密编译器选项,/d1ZWTKEN,这使得编译器打印它从C++的C+CX源生成的C++代码。“@ IcTestTaby:如果你读到我链接到的博客文章,它会说:“系统标头广泛使用中可用的WINAPI_FAMILY_PARTITION宏,但是,随着时间的推移,随着新系列的引入,分区的确切组成可能会发生变化,因此建议仅依赖于FAMILY宏。“你好,雷米,谢谢你的例子!我希望在C++中可以得到一个等价的函数而不是CX/C++。因此,我可以简单地修补最初为旧Win32 API编写的第三方库;并将该库编译为Windows Phone或Store App DLL,最终将在Windows运行时组件中使用。但目前看来,这不是一个选择。我会再给它几个小时,看看是否有其他更好的解决方案。如果不是,这将是最好的答案。WrRT-API被暴露为C++对象作为COM对象。也许您可以使用来与它们交互。如果使用WINAPI家庭分区(WINAPI分区桌面)
,则预处理器指令可能应该是
@Yuchen:C++/CX是C++语言,用语言投影来简化Windows运行时的访问。虽然C++从C++ C++中提取语法,但是它编译成本地代码,非平台特定的语法与C++ 11兼容,所以你可以编译C++代码作为C++ +cx.@ Yuchen:你可能想检查一下:“编译C++时,Visual C++编译器将大多数C++ /CX构造转换成等价的C++代码。有一个顶级机密编译器选项,/d1ZWTKEN,这使得编译器打印它从C++的C+CX源生成的C++代码。“@ IcTestTaby:如果你读到我链接到的博客文章,它会说:“系统标头广泛使用中可用的WINAPI_FAMILY_PARTITION宏,但是,随着时间的推移,随着新系列的引入,分区的确切组成可能会发生变化,因此建议仅依赖于FAMILY宏。”
void GetTemporaryDirectory( wchar_t* dir, size_t maxsize )
{
    if ( !maxsize ) return;
    *dir = 0;
    #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
    DWORD nChars = GetTempPath( maxsize, dir );
    if ( nChars > 0 )
        dir[nChars-1] = '\0'; // Trim trialing '\'
    else
        *dir = 0;
    #else // Windows Store WinRT app
    auto folder = Windows::Storage::ApplicationData::Current->TemporaryFolder;
    wcscpy_s( dir, maxsize, folder->Path->Data() );
    #endif // WINAPI_FAMILY_PARTITION
}