Discussion:
CCW COM and Parameters
(too old to reply)
James
2009-04-26 01:18:01 UTC
Permalink
I am writing a component in C# which is a COM Callable Wrapper. Some of the
methods pass structs across COM. My question is, how does COM pass
parameters such as structs? I know that C# passes structs by value. The
struct data being passed from the Win32 client is never going to be modified,
so I would like to prevent making a copy of the struct across the COM
barrier. In C# The struct is being passed by reference (added ref keyword to
parameter) since I don't want to make a copy there either. I'm going through
enough layers already and I would prefer not to be making multiple copies of
a struct every time it is passed as a parameter.

Thanks!
--
James
Pavel Minaev
2009-04-26 10:07:51 UTC
Permalink
I am writing a component in C# which is a COM Callable Wrapper.  Some of the
methods pass structs across COM.  My question is, how does COM pass
parameters such as structs?
It's up to you, depending on how you define the interface.
 I know that C# passes structs by value.  The
struct data being passed from the Win32 client is never going to be modified,
so I would like to prevent making a copy of the struct across the COM
barrier.  In C# The struct is being passed by reference (added ref keyword to
parameter) since I don't want to make a copy there either.  I'm going through
enough layers already and I would prefer not to be making multiple copies of
a struct every time it is passed as a parameter.
If your C# code defines the argument as "ref" or "out", there should
be no copy involved during marshaling, unless the struct itself has
some fields that require special marshaling (e.g. strings, or arrays
declared without "fixed" keyword).

Loading...