フォルダ選択ダイアログでのCOM初期化 – プログラミング – Home

フォルダ選択ダイアログでのCOM初期化
 
通知
すべてクリア

[解決済] フォルダ選択ダイアログでのCOM初期化


晃
 晃
(@晃)
ゲスト
結合: 20年前
投稿: 9
Topic starter  

SHBrowseForFolderを使ってフォルダを選択させるダイアログを表示させています。
改めてネットでSHBrowseForFolderを調べたところ、
この関数を使うにはCoInitializeExで
COMを初期化しておかなければならないと書いてあるページがありました。

実際にMSDNでSHBrowseForFolderの説明を見てみるとそう書いてある気がします。
(英語は苦手なので正しく読めてるか怪しいですが。汗)
しかしCOMの知識はほぼ皆無な状態で
検索をかけても参考になりそうなページが殆どなく、
CoInitializeExに関して何も判らない状態です。

いちおうCoInitializeExを呼ばなくても
正常に動作はするのですが何だか不安です。
SHBrowseForFolderを使うとき、
本当にCoInitializeExを呼ばなければならないのでしょうか?
また、本当にそうならどのように使えばいいのでしょうか?

現在は以下のコードでうまく動いてますが、
合ってるのかも間違ってるのかも判らない状態なので
その辺も合わせて教えてもらえたら嬉しいです。
//------------------------------------------------------
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
SHBrowseForFolder(&bi); //bi:BROWSEINFO構造体です。
CoUninitialize();
//------------------------------------------------------

環境 : WinXP VC++6.0


引用未解決
トピックタグ
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

んっと・・・MFCを使っていたら・・・CoInitialize は、いらないかな~
使っていなかったらいるかな~

確か、OleInitialize で呼ばれてるはず
# 一応MSDNも確認したけど、OleInitialize か CoInitialize を呼べとあるので
# というか、両方呼ぶとおかしくなったような・・・?


返信引用
晃
 晃
(@晃)
ゲスト
結合: 20年前
投稿: 9
Topic starter  

すいません、書き忘れてました。MFCは使ってないです。
…ってことはやっぱり必要なんですね。
ありがとうございます。

訊いてばかりになってしまいますが、
呼出し方のほうは最初に書いたやつで大丈夫でしょうか?
(実際にこのように使っているコードを
 見たことがなくて合っているか不安で。)


返信引用
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

まぁ、別段問題ないと思うけど・・・

個人的には・・・

CoInitialize はアプリ起動時
CoUninitialize はアプリ終了時

のそれぞれ一回だけのがいいような?


返信引用
晃
 晃
(@晃)
ゲスト
結合: 20年前
投稿: 9
Topic starter  

うぎゃ。よく見たら
「通常一度だけ呼ばれる」(注:怪しい日本語訳)
って書いてありますね。
この関数は必要な関数の前に引数を変えて
何度でも呼び出すもんだと思いこんでました。
もっとよく見たら引数を変えて呼んじゃいけないようで(汗

これなら
> CoInitialize はアプリ起動時
> CoUninitialize はアプリ終了時
にも同感です。
これでいくことにします。

ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました