環境:Win2000+VB6SP5

自作のDLLのVBPとそれを参照するEXEのVBPがあるのですが、
EXE側からDLL呼び出し、呼出し後もDLL内のソースをステップ実行するにはどうすればよいのでしょうか?

よろしくお願いしますm(__)m

A 回答 (2件)

ActiveX DLLの作成・デバッグ方法はMSDNの



Visual Basic の使用方法
└コンポーネント ツール ガイド
 └ActiveX コンポーネントの作成方法
  └ActiveX DLLの作成
   └テスト アプリケーション TestThing の実行

当りが参考になります。

要は「Ctrl + F5」で実行です。
    • good
    • 0
この回答へのお礼

なんだかんだでグループ化した後に、DLL側をコンパイルし
それをEXE側で参照設定させるとデバッグできるようになりました。
ありがとうございました。

お礼日時:2003/10/15 11:51

プロジェクトグループ

この回答への補足

にしてもブレークポイントで止められないのは、何か問題があるのでしょうか?

補足日時:2003/10/14 17:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qダンプファイルから特定のテーブルのみインポート

データベース丸ごとmysqldumpでダンプしたファイルからリストアを行う際に、特定のテーブルのみインポートする方法はありますでしょうか。

ダンプファイルを開いて地道に編集すれば良いのでしょうが、ダンプファイルが1Gほどあるので、とてもできません。
その中の100M程のデータを得るために、いつも数時間かかっています・・・。

Aベストアンサー

シェルスクリプトか何かを使ってファイルを分割するか、前の方が答えられてるように、一度別のDBに突っ込んでしまうか。

ただ "いつも数時間かかっています" とあるので、定期的に行っている作業なのであれば、dump を書き出すときにテーブルを指定したほうが早いかもしれません。

ファイルに書き出さないで直接ぶちこむ手もあります。

mysqldump --user=neko \
--disable-keys \
--extended-insert \
--default-character-set=binary \ ←環境による
--complete-insert \
--no-create-info \
--no-create-db \
--order-by-primary \ ←お好みで
--quick \
--compress \
・・・お好みのオプション
DB名 \
テーブル名1 \
テーブル名2 \
・・・
| mysql --host=転送先 --user=neko -C 転送先DB名

これだと一度ファイルに書き出すよりもかなり早く終わると思います。

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html

シェルスクリプトか何かを使ってファイルを分割するか、前の方が答えられてるように、一度別のDBに突っ込んでしまうか。

ただ "いつも数時間かかっています" とあるので、定期的に行っている作業なのであれば、dump を書き出すときにテーブルを指定したほうが早いかもしれません。

ファイルに書き出さないで直接ぶちこむ手もあります。

mysqldump --user=neko \
--disable-keys \
--extended-insert \
--default-character-set=binary \ ←環境による
--complete-insert \
--no-create-info \
--no-...続きを読む

Q異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

結論から質問内容を言うと、

異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

具体的には、
A.exeと、B.exeの両方で参照している
Common.dllに定義しているクラスの
staticなフィールドは、A.exe実行時のメモリ領域と、
B.exe実行時のメモリ領域と、完全に別で独立状態
であることを前提にしているのですが。。。


これは本当に真なのかを確認させてください。
あたりまえじゃねーかバカ野郎っていわれそうですが
ちょっと、そこ間違えると後で、痛いので、
念押しで再確認お願いします。


<質問に至った経緯>
Delphi3.0からVB.NET2003(2005未対応のコンポーネントを使用する諸事情があったから)
にシステム移行の案件があり、
工数を避けません。現在、開発方針を検討中で調査していると、デルファイプロジェクトAと、
デルファイプロジェクトBで、Commonという名前の
フォルダにあるソースを共有していて、
A.exeとB.exeを作っていました。
特に共通部分をdllにしていたりしていませんが。
VB.NETでそれは、きついので、
Commonにあるソースだけ、集めたCommon.dllを作る
プロジェクトを作り、Aプロジェクト、BプロジェクトがCommon.dllを参照するやり方を検討しました。
Common.dllには、たくさんグローバルな変数が定義されていたので、
グローバルなデータは、もともとのソースファイルごとにクラスを
作ってそこにスタティックなフィールドとして宣言していく。それをAや、Bのプロジェクトのソースで
使うが、もともと、デルファイがexeが完全にわかれていたので、VBでdllに分けた結果、実行時にメモリも
共有されると、意図した動きをしてくれない懸念が
あるので、それはないのかどうかを確認したかった。
###########################################


以上です。

結論から質問内容を言うと、

異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

具体的には、
A.exeと、B.exeの両方で参照している
Common.dllに定義しているクラスの
staticなフィールドは、A.exe実行時のメモリ領域と、
B.exe実行時のメモリ領域と、完全に別で独立状態
であることを前提にしているのですが。。。


これは本当に真なのかを確認させてください。
あたりまえじゃねーかバカ野郎っていわれそうですが
ちょっと、そこ間違えると後で、痛いので、
念押しで...続きを読む

Aベストアンサー

>異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?
独立です

Qoracle ダンプファイルのサイズとインポート先の表領域の使用サイズ

oracle ダンプファイルのサイズとインポート先の表領域の使用サイズの関係
あるダンプファイル(2.5GB)をオラクルDBへimportしたら、
そのDBの表領域が10GBほど使用されました。
2.5GBのものをimportしたのに、なぜここまで表領域を消費するのでしょうか?
(これまでこのようなことはありませんでした。)
表領域の使用サイズをもっと少なくするにはどうすればよいのでしょうか?

エクスポート時のコマンド
exp aaaa/aaaa file=bbbb.dmp log=exp_cccc.log consistent=y

インポート時のコマンド
imp aaaa/aaaa file=bbbb.dmp log=imp_cccc.log

エクスポート時に「compress=n」をつけたり、
インポート時に「ignore=y」をつけたりしたのですが、
とくに変化はありませんでした。

Aベストアンサー

ExportファイルのサイズとImport後のサイズは同期しません。よくある誤解です。

ExportファイルにはCreate文とInsert文が書かれています。
Create文にテーブルの初期サイズが設定されてます。初期サイズはCreate時に確保されます。データが少なくても(=Insert文が少ない)初期サイズが大きければテーブルのサイズも大きくなってしまいます。

もちろん、索引のサイズが大きい可能性はあります。
ただ、索引がデータ量の4倍のサイズになるとは思えません。
show=yでインポートを行うと、Create文が表示されるので、そこの初期エクステントを調べればわかると思います。

>インデックスをインポートしないようにすると
>DBへデータを入れたあとにインデックスがきかなくならないのでしょうか?
索引が存在しないので当然、索引検索は行われません。

>それともインポート後に検索したときに自動で
>つくものなのでしょうか?
明示的に作成しない限り自動で作成はされません。

QEXEとソースで動かすのとではEXEで動かす方が断然早い?

VisualBasic6でソースを動かすのと
コンパイルしてEXE形式で動かすのでは、
多分EXEの方が早いと思うのですが、
全然スピードが違うと言うことはありえるのでしょうか?

例えば、処理完了まで2時間~3時間もスピードが変わることは
あるのでしょうか?処理はデータベースを更新、参照したりするものです

どなたか教えて下さい。

windows2000
vb6 sp5

Aベストアンサー

Visual BasicではなくVisual C++での結果ですが...

ソースで動かす状態をデバッグ状態(Debug Build)
コンパイルで動かす状態をデバッグなしでのコンパイル(Release Build)
を用い、最適化されない単純処理を300万回繰り返すプログラムを作成して処理に必要な時間をプログラム上で計測しました。

結果はそれぞれ
 36秒
  2秒
でした。

これはあくまでVisual C++での結果ですがVisual Basicでも同じテストを行えば同じような結果になるはずです。
つまり処理は

ソースで動かした方が遅くなります。

また処理完了まで2時間~3時間もスピードが変わることは
あるのでしょうか?ということに関してですが...処理内容と全処理時間にもよるかと思います。上の例では34秒しか変わらなかったわけですし...

Qメモリダンプファイルサイズの設定方法を教えてください。

以下についてどなたかご存知の方がいらっしゃいましたら教えてください。
PC立上時に、『メモリダンプ収集設定確認』という
ダイアログが表示されてしまいます。

トラブルシューティングをみたところ、実際にPCに実装しているメモリ容量と
メモリダンプファイルサイズがアンマッチのために出ているとのことで、
「メモリダンプファイルサイズを再度設定しなおして下さい。」とのことですが
肝心の設定方法がわからずに困っています。

ご存知の方がいらっしゃいましたらご教授願います。

OSはWindowsServer2003です。
よろしくお願い致します。

Aベストアンサー

マイコンピュータ>右クリック>プロパティ

システムのプロパティが開かれます
「詳細設定」タブ
「起動と回復」項目で
設定 クリック
「デバック情報の書き込み」
この設定のいったん変更して「OK」しもう一回もとの設定にもどします
たとえば
「完全メモリダンプ」→「カーネルメモリダンプ」→OK
「カーネルメモリダンプ」→「完全メモリダンプ」→OK
上記のようにします

Qソースファイルを無くしました。exeファイルからソースを復活できませんか?

Basicのソースファイルを無くしてしまいました。
exeファイルは残っているのですが、ここからソースファイルを復活することはできるでしょうか?
そのようなやり方、もしくはそういうことができるソフトがありましたら教えてください。

Aベストアンサー

EXE形式をリバースするツールはディスアセンブラ(逆アセンブラ)がありますが、出力されるのはアセンブラコードです。
BASICコードを出すことは出来ません。
ソフトボート社 ソーサーVer97

参考URL:http://www.softboat.co.jp/product/sr97/index.html

Qデバッグ終了後、再度デバッグ動作できない

簡単な電卓のプログラムを組んで、ビルド後デバッグして、一旦デバッグ終了のためにフォームの右上の×ボタンで終了し、再度デバッグ動作を実行するとデバッグに入れなくなります。

一旦Code Gear C++ Builder 2009を終了使用とすると、”デバッグを終了しますか?”というメッセージボックスが出てきます。


そのままIDEの終了動作を行うと”デバッグプロセスを初期化できません のプロセスを終了する際にデバッガで致命的なエラーが発生しました。作業中のファイルを保存し CodeGear C++ Builderを再起動してください。”


このようなメッセージボックスが出てきて強制終了してから起動しないかぎり再度デバッグ動作ができないのですが、解決方法ご存じの方いらっしゃいませんでしょうか?


現在使用しているのはCode Gear C++ Builder 2009 です。

Aベストアンサー

>一旦Code Gear C++ Builder 2009を終了使用とすると、”デバッグを終了しますか?”というメッセージボックスが出てきます。

と出るということは、プロセスが残っているのでしょう。

>一旦デバッグ終了のためにフォームの右上の×ボタンで終了し、再度デバッグ動作を実行するとデバッグに入れなくなります。

で、フォームは閉じたが何らかの理由によりプロセスが終了していない。
ということかと。
タスクマネージャでみたらプロセス残っていませんか?

コードがない状態ではそこまでですかね。

QVB .NetのDLL参照について

名前付パイプの処理をしているのですが、DLLが参照できません。

Public Class ClsJi01
  Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer

 Public Sub M_Pipe()
  Dim r As Integer
  Dim rpipe As Integer
  Dim err_code As Integer

  r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)

 End Sub
End Class

Point.DLLは以前VB6.0の時に使用していたDLLで自作です。
これで実行すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ます。
どうしたら良いのでしょうか?

名前付パイプの処理をしているのですが、DLLが参照できません。

Public Class ClsJi01
  Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer

 Public Sub M_Pipe()
  Dim r As Integer
  Dim rpipe As Integer
  Dim err_code As Integer

  r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)

 End Sub
End Clas...続きを読む

Aベストアンサー

全部ByValでやっているようですが、間違いないですか?

VALとREFで違っていたりしても、同様のエラーが出る場合があります。

QVisual Studio リモートデバッグについて

Visual StudioのPro/Teamはリモートデバッグができるとあるのですが、MSDNを見てもリモートデバッグが具体的にどういうものか理解できていません。
デバッグ対象はC++で書いたコードや.net C#で書いたコードです。
2台コンピューターを用意して一方のプログラムをデバッグしながら制御ができるということでいいのでしょうか?
また、Virtual PC上のプログラムにアタッチするというようなことも可能なのでしょうか?
普通のデバッグと操作上や機能上の違いはあるのでしょうか?
普段Visual Studioでデバッグする時のようにステップ実行やアセンブラ表示、レジスタの様子、メモリーの様子、変数の様子など見れるのでしょうか?もし可能なら次買う時はProを検討したいのですが。
デバッグしている様子などサイトを探したのですが見つからずイメージができないので、詳しい方いましたら教えていただけると助かります。

Aベストアンサー

実際に自分ではやったことないですが、自分なりの理解の範囲で…

基本的にはPCを2台、用意して、
片方はデバッグしたいプログラム(debugee = デバッギ)を動かし、
他方はデバッガ = VisualStudio を動かします。

2台のPC間はなんらかの通信(LAN等)で繋ぎます。

何故そんなことをする必要があるか?

1台の PC で GUI やグラフィック等のデバッグをしたことがあるなら分かると思いますが、
たとえば、

  ボタンを連打すると画面表示がくずれる

などのバグを、1台の PC 上で対象プログラムとデバッガ(VisualStudio)を同時に動かしてデバッグすると
バグが発生(画面がくずれる)した瞬間にプログラムがブレークポイントで止まって、
デバッガに制御が移ります。
※表示処理の関数にブレークポイントをセットしておいた場合。

この場合、プログラムは停止しているので、バグが発生している状況(表示がくずれた画面)は
表示処理の前や途中だったりして、まともに表示されない状態になっています。

また、プログラムがブレークポイントで停止してデバッガがアクティブになると、デバッガが最前面に表示されるため、
デバッグ対象のプログラムは背後に隠れます。

この後で、デバッガ画面をよける/縮小しても、対象プログラムは停止していてリドローされないため、
ウィンドウ/ダイアログは真っ白のままで、見たいものが見れない状態になってしまいます。

なので、デバッガが別の PC で動いていれば、
バグが発生した瞬間の画面を見られる!
ステップ実行すれば、問題が発生している状況を逐次、見ることができる!
というわけです。
※これは例ですので、これ以外にもリモートデバッグが有用な状況はあるはずです。


なお、Windows のデバイスドライバの開発とか、
Linux のカーネル/デバイスドライバ開発、
組み込みの開発などは
基本的にリモートデバッグです。


> 2台コンピューターを用意して一方のプログラムをデバッグしながら制御ができるということでいいのでしょうか?
Yes

> また、Virtual PC上のプログラムにアタッチするというようなことも可能なのでしょうか?
詳しくないですが、たぶん No

> 普通のデバッグと操作上や機能上の違いはあるのでしょうか?
違いは無いと思います。


※最初にも書きましたが、自分はやったことはないので、
 詳しい方がいれば説明願います。

実際に自分ではやったことないですが、自分なりの理解の範囲で…

基本的にはPCを2台、用意して、
片方はデバッグしたいプログラム(debugee = デバッギ)を動かし、
他方はデバッガ = VisualStudio を動かします。

2台のPC間はなんらかの通信(LAN等)で繋ぎます。

何故そんなことをする必要があるか?

1台の PC で GUI やグラフィック等のデバッグをしたことがあるなら分かると思いますが、
たとえば、

  ボタンを連打すると画面表示がくずれる

などのバグを、1台の PC 上で対象プログ...続きを読む

QメニューEXEよりdllを呼び出す方法

Vb.Netで、メニューEXEより、プログラムdllを呼び出す場合なのですが、VB6.0ですと、CreateObjectを使用して呼び出すことが可能だと思いますが、.NETにて同じ事を行おうと考えた場合、どのように作ればよいのでしょうか?
私が調べた感じでは、メニューEXEの参照設定にプログラムdllを追加させる方法です。
上記方法ですと、プログラムdllが増えるたびにEXEに項目を追加しないとまずく、非効率だと思うのですが…

Aベストアンサー

http://www.microsoft.com/japan/msdn/thisweek/10lines/notouch_deployment_cs.asp


人気Q&Aランキング

おすすめ情報