COM - [in]参数为SAFEARRAY(STRUCT)

时间:2011-08-30 14:30:01

标签: com

我能够使用SAFEARRAY(BSTR)作为输入调用COM接口方法。如果我定义一个简单的(只包含一些BSTR-s字段)STRUCT来传递给我得到的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()时,会在运行时抛出异常。

1 个答案:

答案 0 :(得分:2)

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

SetUsers([in] SAFEARRAY(UserEntity) input)

已定义。 为了解决这个问题(至少对于.NET 4.0),必须更改导入的COM服务器的以下属性:嵌入互操作类型=错误