質問: VB2017でプロジェクトをビルドすると次の警告が出てしまいます。 どなたかご教授頂けると助かります。宜しくお願いします。 ちなみにコンパイルの対象CPUは、AnyCPUで「32ビットを優先」のチェックを外しています ●警告 「COM 参照 "MSXML2" をパス "C:\Windows\SysWOW64\msxml6.dll" から処理しています。'SAXAttributes60.getValue' の引数のうち少なくとも 1 つをランタイム マーシャラーでマーシャリングできません。 したがってこのような引数はポインターとして渡され、アンセーフ コードの使用が必要になります。」 ●環境 Windows10 Pro Visual Stadio 2017 ●プロジェクトの参照設定 Microsoft XML 6.0 以上、宜しくお願いします。
回答: .NETではメモリー領域のライフタイムが自動で管理され、不要になれば自動で解放されます。 これはマネージド環境と呼ばれています。 .NETではないランタイム環境ではメモリー領域はセルフ管理です。 これはアンマネージド環境と呼ばれています。 マーシャラーはこのマネージドとアンマネージドの仲介をするクラスですが、利用には前提があって、その前提から外れる処理が必要になっているので、前提に合うようアンセーフコード(マネージドで記述するアンマネージド処理を指す)が必要になっているというメッセージです。 マネージドでランタイム環境が行っているリソース管理検査がアンセーフコード内の処理については行えないので、メモリーリークやランタイムエラーの原因になる事があるための警告ですが、VBではビルド時に内部で自動生成されている要素に対してのそのメッセージの原因に対しては手出しができません。 唯一できる可能性があるとすればワーニングを黙らせる事くらいです。