質問: c#、c++間のdllの呼び出しについて いつも拝見させていただいております。 さっそくですが、質問致します。 現在、ネイティブな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を参照して 実行(呼び出し)しています。
回答: デバッグビルドではなくリリースビルドにして c++dll側を debug情報の生成=はい にして デバッグしてみてはいかがでしょう デバッグビルド時に具現化しないバグも捕まえられるかもしれません