我能够使用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()时,会在运行时抛出异常。
答案 0 :(得分:2)
问题出在使用exe COM服务器的C#客户端
SetUsers([in] SAFEARRAY(UserEntity) input)
已定义。 为了解决这个问题(至少对于.NET 4.0),必须更改导入的COM服务器的以下属性:嵌入互操作类型=错误