プロが教えるわが家の防犯対策術!

いつも拝見させていただいております。

さっそくですが、質問致します。

現在、ネイティブなC++ DLLを作成しています。
これを今回、C#のアプリケーションから呼び出すことになりました。
DLL内にはクラスを作成しており、内部にXMLのデータを保持するような
クラスを作成しております。(XML操作にはMSXMLを使用しております。)

問題なのはC++アプリケーションから呼び出した時は正常に動作するのですが、C#からの呼び出しの時はC++アプリケーションから呼び出した時には発生していないエラーが検出されます。

エラー内容は
System.AccessViolationException
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
になります。
エラー内容からしてC++内でのメモリ操作に問題があると
思われるのですが、C++からの実行時には検出されていないので理由がわからずに困っております。
ネイティブなDLLに対してはデバッグも行えないため、手に負えません。
(現在、1行ごとにログを埋め込み、TCHAR型のnewを4byte行っている箇所で処理がストップしてしまっているようです。C++からの呼び出し時には正常に処理される箇所です。)
ネイティブなDLLに対してのデバッグ方法や似たような現象にあわれた方がいらっしゃいましたらご助力お願い致します。


・対象のDLLのクラスは_declspec(dllexport)にてエクスポートを行っています。

・C#からの呼び出し時にはネイティブなDLLのためC++/CLIで作成したプロジェクトでラッパークラスを作成してアクセスを行っています。

・C++アプリケーションからの呼び出し時はプロパティの設定でインクルードディレクトリ、LIBファイルの設定等を行って直接DLLを参照して
実行(呼び出し)しています。

A 回答 (2件)

デバッグビルドではなくリリースビルドにして


C++DLL側を Debug情報の生成=はい にして
デバッグしてみてはいかがでしょう

デバッグビルド時に具現化しないバグも捕まえられるかもしれません
    • good
    • 0

C++側の出力ファイル .DLL .PDB などを C#の出力フォルダ bin\debug などに出力しておいて



C#側のプロジェクトプロパティのデバッグの『アンマネージ コードのデバッグ』にチェックを付けておく

こうしておけば C++のコードもデバッグできると思いますよ

この回答への補足

ご回答頂いた内容にてアンマネージドコードのデバッグは
可能となりました。
ですが、また厄介なことにC#からの呼び出し時にデバッグしてみても
エラーとなりません。
アンナネージドコードデバッグを無効に設定すると再度現象が発生します。
他に何か有益そうな情報がありましたらご教授願いします。

補足日時:2008/05/20 14:40
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど。設定を行うことでデバッグが可能となるとは思いませんでした。
これで少し進展があればよいのですが。。
ご助力ありがとうございます。

お礼日時:2008/05/20 01:56

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