We are working on exposing an assembly to COM.
Among other things, we frequency use nullable values such as long?, DateTime?, etc. These are generic types and can't be exposed to COM.
What is a good substitute for these data types for COM?
We have tried the following:
//Original CustomerID property in class
public long? CustomerID
{
get;
set;
}
//Explicit COM interface
long IComInterface.CustomerID
{
get { return CustomerID.GetValueOrDefault(); }
set { CustomerID = value; }
}
The problem is, we need a way to pass "null" back and forth through COM. Using a number like -1 or 0 won't work because these are valid values as well.
We are having to use nullables b/c these originally came from our database schema.
What about using a Variant (VT_DATE) on the COM side? If you declare the member as object, you should be able to pass a DateTime or null and COM interop should handle it ok. See the following on MSDN for more details.
Marshaling Object to Variant