【プログラム(VB6)からDLL(VC6)を呼び出しDLL内に存在するブレークポイントでとめたい!!】


と思っているのですが、VB6からVC6のDLLの呼び出しができるのみでデバッグは出来ません。
デバッグを行うにはどのように設定すれば良いでしょうか?
アドバイス頂きたく宜しくお願いします。


現状:

 ・VCのDLLはデバッグモードで作成している
 ・VBの設定はとくになし
 ・デバッグは以下の手順で試みている
 
手順1:VC6メニュー→プロジェクト→設定→デバッグ→『デバッグセッションの実行可能ファイル(E)』で、DLLを呼び出すプログラムの設定
手順2:VC6からプログラムを起動する(この段階でVBで作成したDLLを呼び出すプログラムが表示される)
手順3:VBで作成したDLLを呼び出すプログラムからDLLのメソッドを呼び出す。
    (DLLの結果は表示されるが、ブレークポイントでとまることがない)

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2010/03/02 22:04:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

ポイント500pt

・VCのDLLはデバッグモードで作成している

VC6 の DLL をデバッグするには *.pdb(デバッグシンボルファイル)が必要です。

(通常、Debug 構成でビルドした場合は \Debug ディレクトリ配下に *.dll とともに出力されます。)

まずは、DLL に対応する *.pdb ファイルが存在するか確認してみてください。


以下は、デバッグ実行時に表示されるアウトプットウィンドウの表示例です。

<シンボルあるケース>
'<path>\Debug\DllName.dll' のシンボルを読み込みました
<シンボルが無いケース>
'<path>\Debug\DllName.dll' をロードしました、合致するシンボル情報は見つかりませんでした。

→ おそらく、このメッセージが表示されているのでは?と思います。


ちなみに、シンボルファイルには

  • 関数の名前、アドレス
  • ローカル変数の名前と位置
  • ソースファイルパスと行番号

のような情報が記録されています。


なお、DLL にデバッグ情報が含まれているかどうか?を確認するのであれば、

dumpbin.exe /headers <dllName> とすることで確認できます。

実際には「Debug Directories」のセクションに *.pdb ファイルのパスが表示されます。

<参考情報>
■ 実行ファイルにデバッグ情報が含まれるか確認する方法
http://social.msdn.microsoft.com/Forums/ja-JP/windowsgeneraldeve...

あと、コメント欄を開けていただければ必要に応じて、追記致します。

id:harunoharuno

回答感謝です。

コメント欄を有効にしましたのでよろしくお願いします。

せっかく回答いただきましたがこの時間では調査する環境がありません(申し訳ありません)。

補うべき情報があるようですので

取り急ぎいくつかの状況を追加で説明いたします。


現在、VCのDLLのデバッグができないため

インターネットで見つけたサイトからサンプルを借り(ttp://www.geocities.jp/i_love_balard/myhome/vbdll.html)

機能を絞った状態で動作確認を行っています。

現時点では残念ながらVCでブレークポイントをつけても止まってくれません。

使わしていただいているサンプルのdebugにはmakedll.pdbが存在しているのでAPIの定義はできていると思うのですが、

dumpbin.exeの確認は本日12:00を超えないとできません。

VCのDLLでデバッグするサンプルになるようなもの、、、、、

もしくはデバッグするための方法を教えていただけると大変助かります。

気がつく点などございましたらまた回答よろしくお願いします。

2010/03/02 01:41:14
  • id:cx20
    以下にデバッグ実行可能なサンプルプロジェクトを作ってみました。

    ■ VC6 / DLL(DllTest.dll)
    http://cx20.main.jp/hatena/file/upload/hatena_1267433630_VC6_DllTest.zip
    ■ VB6 / EXE(Project1.exe)
    http://cx20.main.jp/hatena/file/upload/hatena_1267433630_VB6_DllCallTest.zip

    サンプルは以下のサイトを参考に作成しました。

    <参考情報>
    ■ NonSoft - VCからもVBからも呼び出せるDLLのサンプル(VC6)
    http://homepage2.nifty.com/nonnon/SoftSample/VC/SampleVcVbDll.html
  • id:cx20
    > 使わしていただいているサンプルのdebugにはmakedll.pdbが存在している

    単純にパスが通っていないという理由かも知れません。
    DLL と同一フォルダに *.pdb があれば、そちらを先に参照しそうな気がします(確認してませんが・・・)ので、
    試しに、[プロジェクトの設定] - [デバッグ] の作業用ディレクトリで
    VB で作った EXE のあるパスを設定し、
    同一フォルダに *.dll と *.pdb ファイルをコピーしてみて試してみてください。
  • id:harunoharuno
    >>cx20様

    ありがとうございます。
    いただいたサンプルは本日12:00くらいに確認し、
    原因調査します。
  • id:harunoharuno

    >>cx20様 2010-03-02 02:04:50 のコメントについて

    コメントありがとうございます。

    『単純にパスがとおっていない』というのは
    pdpのパスができていないためデバッグできない可能性
    を指摘しているのですね。

    考えもしませんでした。
    また、気がつくことなどありましたらコメントいただけると助かります。
  • id:heke2mee
    VBで作ったEXEが参照しているDLLとVCのデバッグ対象のDLLが違うのでは?

    DLLの検索順
    http://msdn.microsoft.com/ja-jp/library/7d83bc18%28VS.80%29.aspx

    EXEをVCのデバッグ用のディレクトリにコピーするかcx20さんの言うように
    [プロジェクトの設定] - [デバッグ] の作業用ディレクトリをEXEがある
    ディレクトリに変更してみてはどうでしょうか

  • id:harunoharuno
    >>cx20様
    >>heke2mee様

    回答ありがとうございました。

    無事解決しました。
    今回の現象は私が、VC6の『実行』でプログラムを起動しているため発生しました。
    DLLとは関係なく単純なプログラムでもこれではブレークしてくれませんよね。
    VCの操作が久しぶりとはいえ残念な感じです。
    (F5などで実行した場合は、ブレークポイントでとまることを確認しました。)

    お騒がせして申し訳ありませんでした。
    また、サンプルまで提示していただき感謝です。

    お蔭様で『起動時の設定が悪い』という考えで調べることができました。
  • id:cx20
    解決されたようで何よりです。
    回答内容と異なる原因だったのにも関わらず高ポイントを配当頂き恐縮です。

    あと、参考までにですが、VB6 のプロジェクトの設定で
    --------------------------------------------------
    (*) 最適化なし [*] シンボリック デバッグ情報を作成
    --------------------------------------------------
    として、コンパイルすると VB6 の EXE も VC6 のデバッガで
    *.frm のソースにブレークポイントを設定してデバッグ実行できるようになります。
    VB6 → VC6 と、またいでデバッグ実行する場合に重宝するかも知れません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません