我的ODL文件如下所示:
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编译器进行编译,命令行如下所示:
/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" 发布于 2015-10-19 13:37:24
您需要告诉它SafeArray中的元素类型。例如,SAFEARRAY(无符号字符)*数据用于一个无符号字符数组。如果数组元素的数据类型在运行时是可变的,则可以将这些元素作为变量的SafeArray传递。例如:
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
);
}https://stackoverflow.com/questions/33215272
复制相似问题