4

Windows COM +サービスタイプライブラリ(C:\ Windows \ system32 \ COMSVCS.dllにあります)を使用して、C#3.0 /.NET3.5で記述されたサービスを使用してリモートマシン上のCOM+プロセスを追跡しています。私が直面している問題は、コンパイラから次のような警告が大量に表示されることです。

'IGetAppData.GetApps'の引数の少なくとも1つは、ランタイムマーシャラーによってマーシャリングできません。したがって、このような引数はポインタとして渡され、操作するために安全でないコードが必要になる場合があります。

上記のメソッドに対して生成された相互運用機能シグネチャは次のとおりです。

void IGetAppData.GetApps(out uint nApps, IntPtr aAppData)

出力はすでに呼び出し元のコードで手動でマーシャリングされているので(つまり、とを使用Marshall.ReadInt32してMarshall.PtrToStructure)、これらのタイプの警告を抑制する方法はありますか?

4

5 に答える 5

8

プロジェクト ファイルの最初のプロパティ グループに次の行を追加します。

<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
于 2016-08-11T06:10:47.140 に答える
2

その警告には番号がないため、#pragmaを使用して警告を抑制することはできませんが、tlbimpを使用してVisual Studioの外部にdllをインポートし、Visual Studioに作成させる代わりに、生成された参照を使用できます。

于 2009-07-20T08:34:37.870 に答える
1

マネージコードで大幅に改善されたカスタマイズ可能なタイプライブラリインポーターを使用して、メソッドのシグネチャをカスタマイズしてみることができます。次に、プロジェクト内の元のCOMライブラリの代わりにこのラッパーを参照します。

于 2009-07-20T08:36:00.300 に答える
0

メイン dll の代わりに Interop.xxxx.dll への参照を指定することで、これを解決できました。私の場合、Interop.TaskScheduler.dll を使用すると動作しますが、taskschd.dll を使用すると警告が表示されます。Rebuild All を使用して確認したところ、警告はなくなりました。

于 2011-08-10T15:39:50.093 に答える
-1

警告が表示されないようにするだけの場合は、#pragma警告ディレクティブを使用できます。これにより、特定の警告を選択的に有効/無効にすることができます。

于 2009-07-20T08:32:34.083 に答える