- ベストアンサー
C++BuilderXでDLLの呼び出しについて
- C++BuilderXを使用して開発したアプリで、CreateProcess()を使用して子プロセスを呼び出す際にDLLの初期化エラーが発生することがあります。
- DependencyWalkerを使用して調べたところ、アプリケーション実行時に関係のないDLLが呼び出されていることがわかりました。
- 本来、呼び出されるDLLはプログラム内で使用されるものに限定されるべきですが、どこで呼び出されるDLLが決まるのか不明です。また、余計なDLLを呼び出さないようにする方法はあるのでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- dllのロードアドレスについて
いつもお世話になっております。 現在、アプリケーションのデバッグを行っていて、dllのロードについて不明な点があります。 C++で作成したアプリケーションを起動すると、main関数が呼ばれる前に「アプリケーションが正しく初期化されませんでした(0xc0000005)。」というダイアログボックスが表示され、エラー終了してしまうという現象が発生しています。 但し、このアプリケーションは共通のソースを使用して、条件コンパイルによってGUIの描画部分等が違うといった、複数のアプリを作成することができます。そして、このうちの1つのアプリのみ上記のようなエラーが発生してしまいます。 デバッガによって正常に動くアプリとエラーになるアプリとで、アプリ実行時にロードされるdllの基底アドレスに違いがあるということが分かりました。 ※エラーになる方は、明らかに不正なアドレスにロードされているdllがあります。大抵のdllは0x60000000以降のアドレスですが、0x00300000代にロードされるdllがあります。 そこで、アプリケーションが実行時にロードするdllの基底アドレスが不正になってしまう理由がわかればと思い質問いたしました。 (コンパイル時のリンクオプション等が間違ってしまっているのかと思っています。。。) そもそも、dllがロードされる基底アドレスがどのように決まるものなのかも分からないのですが、どなたか御教授して頂けないでしょうか? 以上、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- dllが見つからない
PhysXLoader.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。 とアプリケーションを起動するとエラーが出ます コンパイル時はdllをきちんと指定され読み込まれているのですが、 どうすれば改善されるでしょうか? プログラムでは #pragma comment(lib,"PhysXLoader.lib") と指定しています
- ベストアンサー
- C・C++・C#
- CreateProcessでアプリケーションエラー
先日、こちらでご質問させていただいた者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2211536 環境は Windows2000 Borland C++BuilderXです。 先日と同様に、 CreateProcessでmodule2.exeを起動しようとしたとき、 module2.exeが立ち上がらない現象が発生したのですが、 その際、下のような内容のエラーポップアップが表示されました。 -------------------------------------------------- module2.exe - アプリケーションエラー アプリケーションを正しく初期化できませんでした(0xc0000142)。 [OK]をクリックしてアプリケーションを終了してください。 -------------------------------------------------- 呼び出し元ではCreateProcessの戻り値を取っており、 エラーが返された場合はエラーログを出力する処理を行っているのですが 現象発生時にはエラーログが出ていなかったことから、 CreateProcessからは成功が返されたように見られます。 今回のようなアプリケーションエラー発生時に、呼び出し元でエラーを検知し エラーログを出力するようにしたいのですが、 どのようにすればよいでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- DLLで期限付きライセンス
こんにちは。 WinXP,SDKで開発しています。 DLLで期限付きライセンスを作成しようと思っています。 こちらで指定した日付を超えたらこのDLLをリンクするアプリケーションが使えなくなるようにしたいです。 どのような作りが良いのでしょうか? よく、30日限定だったり、12月31日までだったりする期限付きの試用版プログラムを見ますが、パソコンの日にちを修正してしまえばまた使えたりするのもあると思います。 相当そのあたりに精通した使用者であればもう諦めるしかないのかもしれませんが、ある程度不正を防ぐ事が出来るとしたら、どのような作りが良いのかアドバイスを頂きたいと思います。 宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- プロセスが実行中かどうか調べる方法
CreateProcessで作ったプロセスが実行中かどうか調べる方法はありませんか。 標準出力に値を吐き出し続けるコンソールアプリケーションから、値を取得して処理をしたいのですが、CreateProcessでつくってパイプで処理しようとしています。ぐぐったところWaitForSingleObjectで待つようなサンプルは見つかったのですが、呼び出したプロセスが終了しないのでこれは使えないので 実行中はずっとループし続けるような感じにしたいのですが。 よろしくお願いします
- ベストアンサー
- C・C++・C#
- MSVBVM50.DLLが見つからなかったため・・
あるアプリケーションをWindows Vistaで使用したいのですが、アプリケーションを実行しようとすると、「MSVBVM50.DLLが見つからなかったため、このアプリケーションを開始できませんでした。」などと表示されて、実行できません。 さらに深く調べてみると、「このプログラムには、欠けているWindowsのコンポーネントが必要です」であるとか「この問題は、Windows Vista とこのバージョンの Microsoft Deprecated DLL Components の間での互換性に関する問題が原因で発生しました。」と表示されます。 とりあえず、ランタイムファイルであるMSVBVM50.DLLをどこかで入手すればいいのではないかと思い、以下のフリーウェアをダウンロード後にインストールを試みましたが、正常にインストールされませんでした。 http://www.vector.co.jp/soft/win95/util/se081909.html さらによく調べた結果、もともとWindows Vistaには上位のバージョンであるMSVBVM60.DLLが標準装備されているとのことです。下位のバージョンであるMSVBVM50.DLLとの互換性がないのでしょうか・・? なお、このアプリケーションはもともとWindows XPで動作するように開発されたものらしく、機種や環境による依存性の確認は行われていないとのことです。Windows XPで正常に動作するかはまだ試していないのでうが、とある事情でVistaでもこのアプリケーションを使用しなければならない状況です。 今の状態ですと、Vistaでの使用は無理でしょうか?
- ベストアンサー
- オフィス系ソフト
- 子プロセスのデバッグ方法について
VisualStudio2008のVCでデバッグをしています。 Win32のCreateProcess関数で"自分自身"のEXEファイルを実行すると、新プロセスが起動するのですがデバッグができません。 CreateProcessの呼び出し側プロセスと、同じプログラムである新プロセスを同時にデバッグすることはできないものでしょうか。
- ベストアンサー
- C・C++・C#
- アプリケーションエラー???(0xc0150002)
「アプリケーションを正しく初期化できませんでした(0xc0150002)。[OK]をクリックしてアプリケーションを終了してください。」が表示されるようになってしまいました。何が悪いのかよくわかりません。DLLが足りないのでしょうか?どなたか、ご教授を宜しくお願いします。 環境 VC6のアプリ、WinXP、Postgreのlibpq.dll ※Postgreはインストール ↓ VC6のアプリ、WinXP、Postgreのlibpq.dll ※Postgreは非インストール
- ベストアンサー
- PostgreSQL
- VC++6で作成したDLLをVC++.NET2003から呼び出せますか
現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。 (プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。) そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。 VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。 それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)
- ベストアンサー
- C・C++・C#
- gdiplus.dllを使わないプログラム開発
はじめまして、 ”Microsoft Visual C++ 2008”にてダイアログベースのプログラムを書いています。 windows2000に対応するために、gdiplus.dllを使用しないプログラムを作成したいのですが、 新規作成したプロジェクトをそのままビルドしただけでもgdiplus.dllが読込まれてしまいます。 読込まなくするには、どのように設定を行なえばよいのでしょうか。 それとも”Visual C++ 2008”ではgdiplus.dllを使用しないダイアログベースのプログラム開発は不可能なのでしょうか。 動作対象OS:win2000(SPなし)以降 開発環境: 言語:Visual C++ 2008(visual studio 2008 professional edition) テンプレート:MFCアプリケーション アプリケーションの種類:ダイアログベース 以上、よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- ICBK54インクのサイズごとの印刷枚数について詳しく教えてください。
- また、カラーインク(ICC54,ICY54,ICM54)の場合も教えてください。
- EPSON製品の消耗品について、印刷枚数の情報を知りたいです。
お礼
お礼遅くなってすみません。 情報ありがとうございました。 DLLの呼び出しがライブラリの仕様によるのであれば プログラム内でどうこうするのはむずかしいですね・・・