سؤال

I am trying Share an Image in Windows 8 Metro C++ Application using Share Charm. To do so, I need to load image to StorageFile^ first. I assume it should looks like:

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

where imageFile is defined in header file

Windows::Storage::StorageFile^ imageFile;

This actual code would throw this exeption

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

This seems to be very trivial, but there is a very little documentation about Sharing in Metro, and the only Microsoft example shows how to do sharing using FilePicker.

Would be very grateful if someone knows how to do it properly.

هل كانت مفيدة؟

المحلول

If "Textures" is coming from your application package, you should use StorageFile::GetFileFromApplicationUriAsync instead:

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;
});

You can also use a task-based continuation (as I show above) in order to inspect the exception information more closely. In your case, the inner exception is: The specified path (Assets/Logo.png) contains one or more invalid characters.

This is due to the forward-slash, if you change it to a backslash you'll see: The specified path (Assets\Logo.png) is not an absolute path, and relative paths are not permitted.

If you want to use GetFileFromPathAsync I would recommend using

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

To figure out where your application is installed and building up your path from there.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top