2015-08-19 3 views
1

Я составляю стороннюю библиотеку libkml для Windows Universal App. И я замечаю, что следующий Win32 API недоступен ни на чем, кроме WINAPI_PARTITION_DESKTOP.Эквивалент GetTempPath на Windows Phone

Ниже от 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 

Кто-нибудь знает аналогичную функцию для этого GetTempPath для Windows Store App и Windows Phone App?

ответ

3

Вот функция упаковщик примера взят из следующей статьи блог MSDN о «Дать общий код для Windows Store и Win32 настольных приложений»:

Dual-use Coding Techniques for Games, part 3.

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 
} 
+0

Здравствуйте, Remy, спасибо за пример! Я надеюсь, что я получу эквивалентную функцию в C++, а не CX/C++. Так что я могу просто исправить стороннюю библиотеку, которая была первоначально написана для старого API Win32; и скомпилировать библиотеку в Windows Phone или Store App DLL, а затем она будет использоваться в компоненте Windows Runtime в конечном итоге. Но, похоже, сейчас это не вариант. Я дам ему еще пару часов, если у других есть лучшие решения. Если нет, это будет лучший ответ. –

+0

API WinRT подвергаются воздействию C++ как COM-объектов. Возможно, вы можете использовать [Windows Runtime C++ Template Library (WRL)] (https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh438466.aspx) для взаимодействия с ними. –

+0

Директива препроцессора, вероятно, должна быть '#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)' вместо этого. @Yuchen: C++/CX - это C++, с языковыми прогнозами для облегчения доступа к среде Windows Runtime. Хотя он заимствует синтаксис из C++/CLI, он компилирует собственный код, а синтаксис, не поддерживающий платформу, совместим с C++ 11, поэтому вы можете скомпилировать обычный C++-код как C++/CX. – IInspectable

1
+0

Знаете ли вы, есть ли эквивалентная функция в C++, а не CX/C++? –

+1

Э-э, я этого не знаю. В документе, который я указал, упоминается следующее: * Вы можете получить доступ к файлам в хранилище данных временных приложений, используя протокол ms-appdata: /// temp /. * –