我能够使用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()时,会在运行时抛出异常。
发布于 2011-08-31 17:32:24
问题出在使用exe COM服务器的C#客户端,其中
SetUsers([in] SAFEARRAY(UserEntity) input)被定义了。为了修复这个问题(至少对于.NET 4.0),必须更改导入的COM服务器的以下属性:Embed Interop Types = False
https://stackoverflow.com/questions/7244835
复制相似问题