Visual C++においての質問です。
APIで関連づけられたアイコンを取得したあと、イメージリストに登録しようとしてるのですが、
「不正な処理」とかで落ちてしまいます。なんか…マズい処理をやってるんでしょうか??
大まかなソースは以下の通りです。
超初心者ですので、とんでもない間違いをしてるだけだと思うんですが…。どなたかご教授をお願いします。

CImageList IconList;
CString FilePath = "C:\\test.txt";
SHFILEINFO FileInfo;

IconList.Create(32,32,ILC_COLORDDB|ILC_MASK,1,1000);
::CoIntialise(NULL);

SHGetFileInfo(FilePath,NULL,&FileInfo,sizeof(FileInfo),SHGFI_ICON|SHGFI_SMALLICON);

このQ&Aに関連する最新のQ&A

A 回答 (3件)

スペルミスの件は、「CoInitialize」と「CoInitialise」の差(zとsの違いのこと)を言ったつもりだったんですけど。


だいたい最初の発言では「CoIntialise」でiも落ちてますし。

で、ImageList.Add()のASSERTで落ちている、ということは、hIconにアイコンハンドルがきちんと渡ってない、ということですよね?
とりあえずSHGetFileInfoの返値を見てみて、
if( SHGetFileInfo(...) ) {
 IconList.Add( hIcon );
}
という風にすれば、とりあえず落ちることはないと思いますけど。

あと、念のために確認しますが、FilePathで示されているファイルは実在しますよね?
    • good
    • 0
この回答へのお礼

if抜けは試してたんですが、Add処理に移ってしまい落ちてしまいました。
値もデバッグで張り巡らして監視したのですが、ポインタの類は見てもサッパリですし…。
自作アイコンでハンドルを取って、ではちゃんと追加してくれるんですけどね。
パスももちろん実在する物を使っています。

明日からの予定で、しばらくの間ネットから離れます。
今回はこの件を取り下げて、COM系統レベルから書籍を片端から見てみることにします。
未解決ですが、cockyさん、本当にありがとうございました。

お礼日時:2001/03/05 00:37

CoInitializeのスペルが違うのは単なるタイプミスですよね?


あと、よく考えたら、SHGetFileInfoの中のdwFileAttributesはあくまで値を入れるところであってポインタを入れるところではないので、そこがNULLなのはまずいような気がしますが。

VC++なら統合環境のデバッガで命令のトレース実行ができるでしょうから、具体的にどこで落ちてるかを特定できるとアドバイスもしやすいんですが。

この回答への補足

デバッグで見たところ、イメージリストでのAddで落ちているようでした。
MFCヘッダーファイル内のASSERTで落ちるようです…。

スペルミスはCointialiseとCoIntialiseのスペルですかね?
SDKヘルプでCoIntialiseとあるし、Cointialiseにすると「定義されてない」と怒られてしまうんです。
dwFileAttributesのNULLですが、どこかのページでのサンプルがこういった使い方をしてたので見よう見まねです…。
ちなみに、FILE_ATTRIBUTE_NORMALなども試してもダメでした。

FileInfoのmemset、イメージリストを関連づけたリストビューの描画停止など、いろいろ組み合わせて試してるんですけど…。(xox)

補足日時:2001/03/04 23:08
    • good
    • 0

SHGFI_SMALLICONであれば、ImageListのイメージサイズは32x32ではなく16x16ではないか、という気がしますけど。



ただ、それを除けばここまでの処理には不都合は見あたらないですが、SHGetFileInfoを実行したあとで、FileInfo.hIconをIconListに登録する部分の処理が書かれてないですよね。
そこを見ないと「不正な処理」で落ちる原因はつかめないと思います。

この回答への補足

ありゃりゃ、Createは(16,16…)ですね。
Addも書き忘れてました。(T△T)
そりゃー分からんわ…。すみませんです。

追加:
IconList.Add(FileInfo.hIcon);

やはりハンドルの渡し方がマズイんかなーと…。

補足日時:2001/03/04 17:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報