0

C# を使用して、C++/Cli で記述された dll をロードしようとしています。次のコマンドを使用しました。

Assembly assembly = Assembly.Load(assemblyName);

以前は問題なく動作しており、何が変わったのか正確にはわかりませんが、今日、dllをロードしようとすると次のエラーが発生し始めました

System.AccessViolationException: {"保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。"}

dll とそれを読み取るコードの両方が同じソリューションにあり、dll 自体は頻繁に変更されます (したがって、dll を使用する理由)。

誰かがこの例外を引き起こす可能性があることを知っていますか?

補遺:

最近追加したブーストを使用するライブラリに絞り込みました。私BOOST_LIB_DIAGNOSTICはそれが以下を使用していることを発見しました:

lib ファイルへのリンク: libboost_date_time-vc100-mt-gd-1_54.lib

lib ファイルへのリンク: libboost_thread-vc100-mt-gd-1_54.lib

lib ファイルへのリンク: libboost_system-vc100-mt-gd-1_54.lib

lib ファイルへのリンク: libboost_chrono-vc100-mt-gd-1_54.lib

同様の問題に対処しているように見えるブースト投稿を見つけましたが、実際には私の問題を解決しませんでした。BOOST_ALL_DYN_LINKプリプロセッサ定義を使用するように指示されていますが、それはさらにリンケージ エラーを引き起こすだけです。

致命的なエラー LNK1104: ファイル 'boost_date_time-vc100-mt-gd-1_54.lib' を開けません

4

1 に答える 1

0

問題は最も明白な方法で解決されました。

ダウンロードしてコンパイルしたブーストは、不足しているすべてのファイルを取得しました(何らかの理由で私のフォルダーから欠落していました)。

要約すると、BOOST_ALL_DYN_LINKプリプロセッサ定義を追加し、ブーストを再コンパイルして不足しているすべてのファイルを取得し、dll が適切なフォルダにあることを確認しました。

于 2014-04-01T15:34:12.870 に答える