views:

194

answers:

3

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?

A: 

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.

Senthil Kumar
I don't have a warning ID to play with unfortunately
jpoh
+1  A: 

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.

Shay Erlichmen
+1  A: 

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.

280Z28