I have an Interface that is defined something along these lines:
Interface foo
{
int someProperty {get; set;}
Dictionary<string, object> Items;
}
The concrete class that implements this interface needs to be registered for COM Interop. Everything compiles and the assemblies seem to register OK, but then when trying to create the COM object (e.g. from PowerShell) I get an error.
This seems to be related to the generic Dictionary<> class that I'm using. So here is the question:
I ended up here via a Google search and, ha ha, I should have guessed this would come from you.
As far as I know generics can't be marshalled through COM with the standard marshallers. What I do know is that an ArrayList in C# turns into a "standard" collection in COM, usable by VBScript, VB, JScript 5.x, etc. But since we're working toward a common goal, I'm going to play with some other aggregate types and see what happens.
Generics can't be COM-visible, VS should give you a compile-time warning about this.
Another solution could be to make the dictionary private and expose methods to add/remove/fetch items to/from the dictionary:
public interface ComVisibleFoo
{
int SomeProperty { get; set; }
//Dictionary<string, object> Items; // can't be COM-visible
void AddItem(string key, object value);
void RemoveItem(string key);
object Item(string key);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With