4

我们正在使用 Windows COM+ 服务类型库(位于 C:\Windows\system32\COMSVCS.dll)来跟踪远程计算机上的 COM+ 进程,该服务使用 C# 3.0/.NET 3.5 编写的服务。我遇到的问题是,我从编译器收到一大堆警告,如下所示:

运行时封送处理程序不能封送“IGetAppData.GetApps”的至少一个参数。因此,此类参数将作为指针传递,并且可能需要不安全的代码来操作。

为上述方法生成的互操作函数签名是:

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

由于输出已经在调用代码中手动编组(即使用Marshall.ReadInt32and 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

我可以通过指向 Interop.xxxx.dll 而不是主 dll 的引用来解决这个问题。在我的情况下,使用 Interop.TaskScheduler.dll 有效,而 taskschd.dll 给了我警告。我使用 Rebuild All 进行了验证,警告消失了。

于 2011-08-10T15:39:50.093 回答
-1

如果您只想隐藏警告显示,您可以使用#pragma 警告指令。这允许您有选择地启用/禁用特定警告。

于 2009-07-20T08:32:34.083 回答