3

共有チャームを使用して 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 での共有に関するドキュメントはほとんどなく、FilePicker を使用して共有を行う方法を示す唯一の Microsoft の例があります。

誰かがそれを正しく行う方法を知っていれば、とても感謝しています。

4

1 に答える 1

5

"Textures" がアプリケーション パッケージからのものである場合は、代わりに 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) に 1 つ以上の無効な文字が含まれています。

これはスラッシュが原因です。バックスラッシュに変更すると、次のように表示されます。指定されたパス (Assets\Logo.png) は絶対パスではなく、相対パスは許可されていません。

GetFileFromPathAsync を使用する場合は、使用することをお勧めします

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

アプリケーションがどこにインストールされているかを把握し、そこからパスを作成します。

于 2012-07-19T21:55:52.253 に答える