【解決方法】私はいつもエラーが発生します "スローされた例外: 読み取りアクセス違反。 Isf は nullptr でした。"

プログラミングQA


私はisfを使用します(タイプ: IShellFolder* ShlObjDl_Core.h で定義) を使用する ParseDisplayName これは IShellFolder の非静的メンバーであるため、特定のオブジェクトに関連している必要があります。
しかし、そのコードを使用すると:

C++
IShellFolder* isf;
LPITEMIDLIST lprnt = { 0 };
ULONG lngth;
isf->ParseDisplayName(hWnd, NULL, (LPWSTR)"C:", &lngth, &lprnt, NULL);

私は得る:

スローされた例外: 読み取りアクセス違反。 isf は nullptr でした。

私が間違っていることは何ですか?

私が試したこと:

私はもう試した:
1- IShellFolder* に * を追加して IShellFolder** にしましたが、うまくいきませんでした。

そして、この質問は前の質問 (引数の 1 つで渡された構造体を取得する関数に関するもの) とは異なりますが、関数の変数からの参照に関するものです。

解決策 1

での以前の質問に似ています 「例外がスローされました: 書き込みアクセス違反です。Lpsh は nullptr でした」というエラーが常に表示されます。[^]. ただし、この場合、ポインターを作成しますが、何かを指すように初期化していません。 ポインターと参照を理解していない場合は、C リファレンスに戻ってガイダンスを参照してください。
使用例については、 IShellFolder インターフェイス 参照 フォルダーの内容に関する情報の取得 – Win32 アプリ | マイクロソフト ラーン[^].

[edit]

また、次の呼び出しでは正しくありません ParseDisplayName;

C++
(LPWSTR)"C:"

キャストを使用して変換することはできません ASCII 文字列に Unicode. を生成する必要があります。 Unicode を使用してコンパイル時に文字を L したがって、次のように文字列にプレフィックスを付けます。

C++
L"C:"

[/edit]

コメント

タイトルとURLをコピーしました