首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM - [in]参数为SAFEARRAY(STRUCT)

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

Stack Overflow用户
提问于 2011-08-30 22:30:01
回答 1查看 2.5K关注 0票数 2

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

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

下面是我在IDL中的声明:

代码语言:javascript
复制
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()时,会在运行时抛出异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-31 17:32:24

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

代码语言:javascript
复制
SetUsers([in] SAFEARRAY(UserEntity) input)

被定义了。为了修复这个问题(至少对于.NET 4.0),必须更改导入的COM服务器的以下属性:Embed Interop Types = False

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7244835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档