• ベストアンサー

ActiveX EXE内でのCurDir関数の戻り値

現在、VB6.0 SP5とWindows2000で、ActiveX EXEを用いたアプリケーションの開発を行っています。ActiveX EXEは、自分と同じフォルダ(たとえば、C:\Test\ など)にある初期化ファイル(INIファイル)を読み、自分でデータベースに接続して処理を行うようにしています。 顧客からの要望により、「自分のフォルダ」を取得するのに「CurDir関数」を用いなければいけなくなりました。しかし、どうも、ActiveX EXE内でこの関数を引数なしで呼び出すと、「C:\WinNT\System32」が返ってきてしまいます。 これはActiveX EXEの仕様ということでしょうか?(COM関連のライブラリを使うために、System32フォルダに処理が移っている?)。 簡単なサンプルを作って実証もしたのですが、もうすこし確実な根拠(マイクロソフト関連の資料など)があれば、と思います。どなたか、この件に関する情報をご存知の方、URLか説明をお願い致します。 (App.Pathを利用すれば問題なく取得できるので、この路線を提案したいのですが、CurDirがダメ、という根拠を揃えたいのです)。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

まず、ActiveX Exeをそのまま実行しているのか、別のプログラムからCOM経由でインスタンスにしているのかによる。 で、COM経由ならば、アウトプロセスCOMインタフェースで動作するので、この呼び出し方法で、「ActiveX Exeのある場所」を正しく取得するためには君の言うとおりAPP.Pathを使用しなくてはならない。 Windowsの制限だとでも言えば良いのではないかな。Active Xの動作原理をつらつら説明するしかないような気もする。

noname#25230
質問者

お礼

早速の回答ありがとうございます。 用法は、別アプリからインスタンス生成してActiveX EXEが抱えるクラスを利用するというものですので、提示いただいたケースそのものです。 そもそも、カレントフォルダは処理内容によっては刻一刻変化する可能性があるので、初期化ファイル(INIファイル)のようなものは必ず一意に場所特定できる方法で参照しに行く必要がありますよね。 そのあたりも絡めて、説明しようと思います。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

「CurDir関数」が「自分のフォルダ」だという考えがそもそもの間違い。 例えば、通常のEXEのショートカットで作業フォルダは任意に指定できる。

noname#25230
質問者

お礼

ありがとうございます。 回答いただいた件も含めて、App.pathでいきましょうよ、ということで納得してもらえました。