• ベストアンサー

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がダメ、という根拠を揃えたいのです)。

noname#25230
noname#25230

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

  • ベストアンサー
  • 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でいきましょうよ、ということで納得してもらえました。

関連するQ&A

  • 並列動作しない?ActiveX EXE

    たびたび申しわけありません。 質問番号:5696830で質問した者です。 自分なりに調べ、アウトプロセスで動くと思われるActiveX EXEを使用した プログラムを行ってみましたが… 並列動作しません…プログラム的には、 ActiveX EXE → Project1 Class1の中の 関数の中に、   For i=0 to 10   Sleep(1000)   Next クライアントVBA → 上記参照設定後 Dim obj As MyComponent.MyClass Set obj = New MyClass 関数実行! としました。問題なく動作はします。 しかし、並列処理ではなく、関数実行終了(Forループ終了)まで 戻ってきません。これでは、ActiveX EXEを使用した目的が…? このような具合です。 私のプログラム構造上、おかしな箇所はありませんでしょうか? よろしくお願いいたします。

  • VBSの戻り値

    windows 2003サーバで使うVBSファイルを以下のように作りました。このとき明示的に戻り値0を返したいのですが、どのような記述になるか教えてください。 --------------------------------------- c:\winnt\system32\ shutdown.exe -r -t 0 ---------------------------------------

  • Temp2.exe tskmsgr.exeが表示される。

    すみません。 NortonAntiVirusでスキャンしたら以下が表示されたのですが、駆除方法がわかりません。 ・圧縮ファイル tskmsgr.exe < C:\WINNT\system32\config\wint3ch.exe は ハッキングツール 脅威です。 ・圧縮ファイル temp2.exe < C:\WINNT\system32\config\wint3ch.exe は ハッキングツール 脅威です。 対処方法を教えいただけませんでしょうか。 宜しくお願いいたします。

  • ActiveX DLL と ActiveXコントロールの違い

    VB6で開発をしています。 複数のEXEファイルを使用するシステムです。 各EXEファイルの共通のモジュールをライブラリ化しようと思っています。 これは [ActiveX DLL] 又は、[ActiveXコントロール] のどちらでも実現できると思うんですが、どちらで作成した方が良いのでしょうか? それぞれのメリット、デミリットを教えて下さい。

  • ウイルスが見つかりません。

    昨日「ウイルスバスター2004」を購入し、早速インストールしました。 (ちなみにOSは2000です。) その後、ウイルス検索を実行したらウイルスに感染していることがわかりました。 ウイルス名は「BKDR_KTBOT.B」です。 感染ファイルは C\WINNT\system32\dllcache\asnetclt.exe C\WINNT\system32\dllcache\userlist.exe のふたつです。 ウイルスバスターでウイルスを処理しようとしましたが、隔離、削除等ができませんでした。 そこで直接、ウイルスの感染源であるC\WINNT\system32のフォルダに行き感染源をさがしたのですがsystem32のフォルダ内には dllcache\asnetclt.exe dllcache\userlist.exe のフォルダ、またはファイルがどこにもありませんでした。 dllcacheというフォルダ、またはファイルは本当にsystem32のフォルダの中にあるものなのでしょうか?? まとめるとウイルスの場所がわかっているのにその場所にウイルスがいないという状況です。 この問題によってウイルスを削除できません。 どなたか助けてください。お願いします。

  • VC++6.0で作成されたActiveXコントロール

    まだプログラミングを始めて日が浅いため、馬鹿な質問をしていたら申し訳ありません。 現在、ActiveXコントロールを使ったプログラムを作成しております。 メインの環境がVC++2008なのですが、このActiveXコントロールがVC++6.0で作られた物であるため、VC++2008で使用しようとするとエラーが出てしまいます。 またプログラム中で使っているライブラリの中でVC++6.0で動いてくれないものもあり、私としては慣れないVC++6.0より何とかして2008でこれを使いたいのですが・・・ 一応現在はVC++6.0でこのActiveXコントロールを動作させるプログラム(以下exeと略)を作り、このexeをVC++2008のプログラム内でCreateProcess関数で呼び出すと言う方法を取っています。 引数はコマンドライン引数、処理結果はファイル経由で受け渡しをしています。 このActiveXコントロールというのがあるカメラから画像を取得するものですので、どうして処理時間の長さが気になります。 そこでプロセスの起動と終了にかかる無駄な時間を減らすため、このexeをDLL化できないものかと考えています。 前置きが長くなりましたが、私が質問したいことは (1)「VC++6.0で作られたActiveXコントロール」を使用したDLLを作れるのか?作れるのならばそれはVC++2008で使えるのか? (2)DLL化以外に処理時間を短くする方法はないか?(例えばexeを立ち上げっぱなしにしたまま引数等をメインプログラムとやり取りできないか?) の2点です。 なおこのActiveXコントロールはソースがないため、VC++2008でビルドしなおすと言う手が使えません。 よろしくお願いします。

  • VTTray.exeってなんでしょうか?

    C:\winnt\VTTray.exeというファイルを誤って消してしまいました。 それ以降、起動時に、 「C:\winnt\VTTray.exe 指定パスにアクセスできません。」 といったエラーが表示されます。 このファイルは消してしまってはまずいものだったのでしょうか? 復旧方法などはありますでしょうか?

  • ActiveX → VB を起動するとCreateObjectできない。

    初めまして。 2003Server+IIS6.0の環境でASP内のActiveXからShell関数でvbのexeを実行させる処理を作成しております。 サーバーから直接exeを実行させると正常に動くのですが、Web上からasp→ActiveX→exeを起動させるとテキストに書き込む処理はできるのですが、「CreateObject」文で「ActiveX コンポーネントはオブジェクトを作成できません」というエラーが返ります。 VB内でなぜ「CreateObject」が出来ないのかご存知の方はいますでしょうか。 宜しくお願いいたします。

  • バッチファイルでexeの場所を検索して起動したい

    A.exeをwinのユーザー環境変数に登録しているか、バッチファイルと同じフォルダに存在するとき、どちらかのA.exeでBコマンドを実行 ただし、cdやpushdを使わず相対パスだけで処理したいのですが、どのように記述すればよいのでしょうか ========================= @echo off setlocal set "CurDir=%~dp0" rem 「A.exeの環境変数のpath」もしくは「%CurDir%A.exe」どちらかのA.exeでBコマンド exit /b =========================

  • Exeの関連付け

    ものすごく困っております。 手違いで、フォルダオプションのファイルタイプで 拡張子exeを新規で関連付けしてしまい、マズイと思って その関連付けしたexeの設定を削除してしまいました。 すると、すべての実行ファイル(*.exe)が実行できなくなってしまい、 どうすることもできなくなってしまいました..。 何とかExeの設定をシステム初期値(?)に戻すことはできないでしょうか...。

専門家に質問してみよう