No.2ベストアンサー
- 回答日時:
お書きになった内容だけでは現象がよくわかりませんが、そのようなケースでEXEファイルに何か書き込まれることはありません。
>VC++のDLLファイルのデバッグモードはVBのEXEファイルでは利用できないのでしょうか?
そんなことはないはずです。
どこで例外エラーが出ているのか調べましたか?
おそらくDLLの内部で例外が出ているのだと思いますから、段階を追って調べた方がいいと思います。
DLLが正しくロードされているか確認しましたか?あるいは、EXEで呼び出しているそのDLLのエクスポート関数のプロトタイプが違うということはありませんか?同じ名前のDLLでバージョンが異なるものが他のフォルダに存在するというようなことはありませんか?
DLLのプロジェクトの「デバッグセッションの実行可能ファイル」にそのVBで作ったEXEファイルを指定してデバッグをしたのですよね?念のためDLLと同じ場所にEXEファイルを置いておくほうがいいかもしれません。
(同じ名前のDLLがシステムフォルダ等にあるとそちらが優先的にロードされてしまう可能性がある)
ご回答ありがとうございます。
もちろんブレークポイントをはりまくってテストを行いました。
例外エラーがでるポイントですが、
ブレークポイントをおってしらべていっていますが、
一定の場所ではありません。基本的にはポインタでありえない
メモリアドレスを参照しようとしているのです。
WaitForMultipleObjectsでとめているスレッドがあるのですが
そこでwaitがとけた後にエラーがおきる確立が40%ほどです。
しかしなぜかリリースでコンパイルしたDLLファイルだと正しく動作するのです。
コンパイルの際にEXEファイルの場所にコピーする設定になっています。
またSystemフォルダにはおいていません。
でそのときにEXEファイルをVB側で再コンパイルしないとエラーがおきるのです。
とりあえずVBのEXEでも問題ないことですので
もうちょっと調べてみたいと思います。
No.4
- 回答日時:
mnabeさんもおっしゃってますけれども、「マルチスレッドのプログラムにブレークポイントはってテスト」というところにまず無理があると思います。
ログをはくなどして、スレッドの制御があなたの想定通り行われているかどうかチェックする必要があるでしょう。その結果をデバッグビルドとリリースビルドと照らし合わせてみたらいかがですか。
ご回答してくださった皆様。ありがとうございました。
何が原因だったかはいまだ不明なのですが、
マルチスレッドでブレークポイントをはると
私の意図していない処理がおきるようです。
本件とは関係ないですが、デバッグとリリースでは使用する
ランタイムライブラリが異なるため、それにより発生するエラーもあるそうです。
No.3
- 回答日時:
っで呼出の方法は?
その呼び出した時のオブジェクトの生きている最中に、DLLは終了できているのですか?
話を聞いていると、マルチスレッドの様ですので、その場合には、オブジェクトの生きている最中に終わらない事がよくあります。特に、デバッグ環境では、スレッドの制御が少しでもミスっていると、よく意味不明なエラーが発生します。
特に、ブレークポイントを張っていると顕著にでます。
そういう時には、動作LOGを生成する等の方法でデバッグするとよいでしょう。
ご回答ありがとうございます。あれから重ねてテストをしてみました。
呼び出しはVB側でDeclare宣言をして呼び出しています。
ブレークポイントでどれかスレッドをとめた場合、他のスレッドは
どういう状態なのでしょうか?
基本的にとまっているようなのですが、
あるスレッドはWaitForMultipleObjectsでCreateEventで
つくったイベントがシグナル状態になるまで待機
しているのですが、そのイベントがシグナル状態になった瞬間に
アセンブラモードの中であるメモリアドレスを参照しようとし例外エラー
でとまってしまいます。
よってハンドルやスレッドは解放されず、正常終了できません。
DLL自体のソースは全て自分で書いたわけではなく、もともとあったものを
私が修正追加を行いまして3つスレッドが同時に動いている感じです。
いろいろなポイントでエラーログを作っていくのは効果的かと思いますが
ステップ数が10000ほどあり、なかなか効率的にはいかないのが現状です。
しかし何故かリリース版のDLLを使うと問題なく動作するという具合です。
そのDLLは特に特殊なライブラリなどは使用せず、MFCもつかっていません。
VCのデバッグモードで正常に実行できない、リリース版だと実行できることから
VBのEXEファイルではデバッグモードで実行できないのではと勘違いしてしまいました。
No.1
- 回答日時:
貴方の提示して条件では、以下の答えになります。
『利用出来ます。』
次の情報が最低は必要です。
VBのバージョンは(多分6.0でしょう)
例外エラーとはどんなエラーなの?
エラーメッセージをなるべく正確
例外エラーは、DLLの呼出前なの後なの?
開発環境のOSは?
DLL のリリースでも同様の現象なの?
VBのプログラム以外からは?
エラーの後、どうなりますか?
VCが終了してしまう(要するに、DLLのエラーではなく、VCがエラーを掃出している)
DLL の実行が出来ないだけ
DLL のステップ実行ではどうなります?
DLL ってどんな作り??
VBから呼べる様に作ったの?
それとも、COM なの?
それとも、ActiveX.DLL なの?
VBからはどんな呼出方法なの?
DLLの宣言部分は大丈夫?
位の情報は提示して欲しいですし、確認を行って欲しいですね。まぁこれだけ全部確認とれば、大抵原因にたどり着くのですがね。
この回答への補足
正確にはVisual Basic6.0SP3
とVisual C++6.0SP3
OSはWindows2000 SP3です。
音声関係のプログラムでして詳しいことは申し上げられないのですが
DLLファイルはマルチスレッドで動いています。
>VBのプログラム以外からは?
これはたしかめいません。DLLが音声データを必要するため
> DLL のステップ実行ではどうなります?
アセンブラモードの中でとまります。
> DLL ってどんな作り??
VBからは呼べます。実際リリース版では正常に動作します。
_stdcallとdef定義で作成しています。
>VBからはどんな呼出方法なの?
必要なパラメータは音声データのポインタと、その他音声データのパラメータです。
>DLLの宣言部分は大丈夫?
デバッグモード以外は正確に動くので大丈夫かとおもいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルでレジストリキーの...
-
PowerShellを使って関連付けら...
-
「パス名が無効です」の発生原因
-
EXCELでのXMLファイルのインポ...
-
アクセスのクエリでコンパイル...
-
gccを行ってもexeファイルが生...
-
cube PDFについて
-
VBから参照できないCのDLLを使...
-
Access2013にてドラッグ&ドロ...
-
【COBOL】read文でエラー
-
Excelファイルのマクロによる排...
-
DBへのコネクションタイムアウト
-
アクセスでイベントのロジック...
-
Excel VBAのApplication.Execut...
-
ASP.NET 2.0にてアプリが動作し...
-
ワークブックに名前をつけて保...
-
マクロについての質問
-
LoadIconでエラー 原因は??
-
エクセル VBA dll 読み込...
-
エクセルマクロでエラーの原因...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba ファイル書き込み時に書き...
-
「パス名が無効です」の発生原因
-
Returnに対するGoSubがありません
-
PowerShellを使って関連付けら...
-
エクセル VBA dll 読み込...
-
batファイルでレジストリキーの...
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
VBから参照できないCのDLLを使...
-
access テキストボックスの値取得
-
VBでファイルが開かれているか...
-
EXCELのVBAでWORDが開いてある...
-
NAS上のファイルの使用中が解除...
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
エクセルマクロでエラーの原因...
-
fgets関数のEOFの扱い方について
-
【COBOL】read文でエラー
-
FTPの送信結果を検知したい
-
FORTRANの実行エラーについて
おすすめ情報