首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MIDL编译时不知道的SAFEARRAY类型

使用MIDL编译时不知道的SAFEARRAY类型
EN

Stack Overflow用户
提问于 2015-10-19 13:07:34
回答 1查看 1.2K关注 0票数 0

我的ODL文件如下所示:

代码语言:javascript
复制
import "oaidl.idl";
import "ocidl.idl";

[oleautomation, uuid(/* redacted */)]
interface ISomething : IUnknown
{
    HRESULT DoSomething(
        [in]BSTR User,
        [in]VARIANT Object,
        [in]SAFEARRAY Array         // may be NULL
        );
}

我在犯错误:

1>.\Something.odl(17):错误MIDL2139:参数的类型不能从void或void派生*:类型'PVOID‘(参数' array’) 1>.\Something.odl(17):错误MIDL2105:切入点/数组不导出任何大小:结构'tagSAFEARRAY‘的字段'rgsabound’(参数'Array‘) 1>.\Something.odl(17):包含一致性数组的错误MIDL2465:结构必须通过引用传递。有关更多细节,请参见MSDN : Struct 'tagSAFEARRAY‘(参数'Array’)

如果我将类型从SAFEARRAY改为SAFEARRAY* (我不认为这是正确的?)我犯了不同的错误:

1>.\Something.odl(17):错误MIDL2139:参数的类型不能从空或空派生*:类型'PVOID‘(参数' array’) 1>.\Something.odl(17):错误MIDL2105:切入点/数组不导出任何大小:结构'tagSAFEARRAY‘的字段'rgsabound’(参数'Array‘)

这仅仅是我需要包括一些其他标题的情况吗?我正在使用VS2013中的MIDL编译器进行编译,命令行如下所示:

代码语言:javascript
复制
/iid "./source/Something_i.c" /h "Something.h" /W1 /char signed /notlb /app_config /nologo /dlldata "./source/Something_dlldata.c" /proxy "./source/Something_p.c" 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 13:37:24

您需要告诉它SafeArray中的元素类型。例如,SAFEARRAY(无符号字符)*数据用于一个无符号字符数组。如果数组元素的数据类型在运行时是可变的,则可以将这些元素作为变量的SafeArray传递。例如:

代码语言:javascript
复制
import "oaidl.idl";
import "ocidl.idl";

[oleautomation, uuid(/* redacted */)]
interface ISomething : IUnknown
{
    HRESULT DoSomething(
        [in]BSTR User,
        [in]VARIANT Object,
        [in]SAFEARRAY(unsigned char) *Array         // may be NULL
        );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33215272

复制
相关文章

相似问题

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