jpoh
jpoh

Reputation: 4586

How to suppress compiler warnings from the use of COM references in a .NET project

We're using the Windows COM+ Services Type Library (located at C:\Windows\system32\COMSVCS.dll) to track COM+ processes on a remote machine using a service that is written in C# 3.0/.NET 3.5. The problem that I am encountering is that I am getting a whole slew of warnings from the compiler that look something like the following:

At least one of the arguments for 'IGetAppData.GetApps' cannot be marshaled by the runtime marshaler. Such arguments will therefore be passed as a pointer and may require unsafe code to manipulate.

The generated interop function signature for the method mentioned above is:

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

As the output is already being marshalled manually in the calling code (i.e. using Marshall.ReadInt32 and Marshall.PtrToStructure), is there a way to suppress these type of warnings?

Upvotes: 5

Views: 5539

Answers (5)

Igor Tkachenko
Igor Tkachenko

Reputation: 468

Add this line in first property group of your project file:

<ResolveComReferenceSilent>True</ResolveComReferenceSilent>

Upvotes: 9

Russell
Russell

Reputation: 1

I was able to solve this by pointing the reference to Interop.xxxx.dll instead of the main dll. In my case using Interop.TaskScheduler.dll works whereas taskschd.dll gives me the warning. I verified using a Rebuild All and the warning is gone.

Upvotes: 0

Sam Harwell
Sam Harwell

Reputation: 99889

You can try using the vastly improved, customizable Type Library Importer in Managed Code to customize the method signatures. Then reference this wrapper instead of the original COM library in your project.

Upvotes: 1

Shay Erlichmen
Shay Erlichmen

Reputation: 31928

since that warning don't have a number you cannot suppress it using #pragma but you can use tlbimp to import the dll outside Visual Studio and use the generated reference instead of letting Visual Studio creating it.

Upvotes: 2

Senthil Kumar
Senthil Kumar

Reputation: 479

If all you want is to hide the warnings from showing up, you can use the #pragma warning directive. That allows you to selectively enable/disable specific warnings.

Upvotes: -1

Related Questions