3

我正在尝试使用 Share Charm 在 Windows 8 Metro C++ 应用程序中共享图像。为此,我需要先将图像加载到 StorageFile^。我认为它应该看起来像:

create_task(imageFile->GetFileFromPathAsync("Textures/title.png")).then([this](StorageFile^ storageFile)
    {
        imageFile = storageFile;
    });

imageFile头文件中定义的位置

Windows::Storage::StorageFile^ imageFile;

这个实际的代码会抛出这个异常

An invalid parameter was passed to a function that considers invalid parameters fatal.

这似乎很琐碎,但是关于在 Metro 中共享的文档很少,并且唯一的 Microsoft 示例显示了如何使用 FilePicker 进行共享。

如果有人知道如何正确地做到这一点,将不胜感激。

4

1 回答 1

5

如果“纹理”来自您的应用程序包,您应该使用 StorageFile::GetFileFromApplicationUriAsync 代替:

Uri^ uri = ref new Uri("ms-appx:///Assets/Logo.png");

create_task(StorageFile::GetFileFromApplicationUriAsync(uri)).then([](task<StorageFile^> t)
{
    auto storageFile = t.get();
    auto f = storageFile->FileType;
});

您还可以使用基于任务的延续(如上所示)以便更仔细地检查异常信息。在您的情况下,内部异常是:指定路径 (Assets/Logo.png) 包含一个或多个无效字符。

这是由于正斜杠造成的,如果将其更改为反斜杠,您将看到:指定的路径 (Assets\Logo.png) 不是绝对路径,并且不允许使用相对路径。

如果你想使用 GetFileFromPathAsync 我会推荐使用

Windows::ApplicationModel::Package::Current->InstalledLocation

找出您的应用程序的安装位置并从那里构建您的路径。

于 2012-07-19T21:55:52.253 回答