Reputation: 4586
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
Reputation: 468
Add this line in first property group of your project file:
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
Upvotes: 9
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
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
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
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