COM-[in]参数作为SAFEARRAY(结构)

COM-[in]参数作为SAFEARRAY(结构),com,Com,我能够使用SAFEARRAY(BSTR)作为输入调用COM接口方法。如果我定义一个简单的(只包含一些BSTR-s字段)结构来传递到我得到的COM中 “[System.ArgumentException]={”参数不正确。(来自HRESULT的异常:0x80070057(E_INVALIDARG))” 未调用我的COM服务器,因为来自客户端的参数似乎与服务器上的预期参数不匹配:E_INVALIDARG 以下是我在IDL中的声明: typedef enum UserEntityType {

我能够使用SAFEARRAY(BSTR)作为输入调用COM接口方法。如果我定义一个简单的(只包含一些BSTR-s字段)结构来传递到我得到的COM中 “[System.ArgumentException]={”参数不正确。(来自HRESULT的异常:0x80070057(E_INVALIDARG))”

未调用我的COM服务器,因为来自客户端的参数似乎与服务器上的预期参数不匹配:E_INVALIDARG

以下是我在IDL中的声明:

typedef enum UserEntityType
{
    User,
    Group,
    IPAddress
} UserEntityType;

[
    uuid(4786F77E-BA5F-4806-B224-12AA8601A5B1)
]
typedef struct UserEntity
{
    UserEntityType      EntityType;
    BSTR                Value;
} UserEntity;

[id(9)]          HRESULT SetUsers([in] SAFEARRAY(UserEntity) input);
当C#4客户端调用SetUsers()时,会在运行时引发异常。

问题出在使用exe COM服务器的C#客户端上,其中

SetUsers([in] SAFEARRAY(UserEntity) input)
定义了。
为了解决此问题(至少对于.NET 4.0),必须更改导入的COM服务器的以下属性:嵌入互操作类型=False

我仍然想知道为什么此设置会导致此问题。它确实解决了我的问题,但为什么?有人知道吗