如何在我的 COM 库中定义此结构
How can I define this struct in my COM library?
我在Visual Studio 2015中创建了一个新的ATL项目。我在库内添加了一个新的简单 ATL 对象,我正在尝试定义一个struct
,以便我可以在我的 COM 实现中传递此struct
。这是我CerberusNative.idl
定义,添加了CerberusErrorDetails
结构:
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(B98A7D3F-651A-49BE-9744-2B1D8C896E9E),
dual,
nonextensible,
pointer_default(unique)
]
interface ICerberusSession : IDispatch{
};
[
uuid(8F2227F9-10A9-4114-A683-3CBEB02BD6DA),
version(1.0),
]
library CerberusNativeLib
{
[
uuid(527568A1-36A8-467A-82F5-228F7C3AC926)
]
typedef struct CerberusErrorDetails
{
INT ErrorCode;
BSTR ErrorMessage;
};
importlib("stdole2.tlb");
[
uuid(CAB8A88E-CE0E-4B4C-B656-C52A7C8A5B18)
]
coclass CerberusSession
{
[default] interface ICerberusSession;
};
};
当我尝试编译它时,出现以下错误:
错误MIDL2312非法语法,除非使用 mktyplib 兼容模式 : CerberusErrorDetails CerberusNative CerberusNative.idl 32
我做错了什么吗?这个mktyplib
错误是什么?它为什么要要求它?
语法错误。正确方法:
typedef
[
uuid(527568A1-36A8-467A-82F5-228F7C3AC926),
version(1.0)
]
struct CerberusErrorDetails {
INT ErrorCode;
BSTR ErrorMessage;
} CerberusErrorDetails;
错误似乎是:
[
uuid(527568A1-36A8-467A-82F5-228F7C3AC926)
]
typedef struct tagCerberusErrorDetails
{
INT ErrorCode;
BSTR ErrorMessage;
} CerberusErrorDetails; /// <- You forgot this
请注意,您似乎正在尝试的内容可能应该考虑使用ISupportErrorInfo
/IErrorInfo
这是报告错误号和消息的标准方式。
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms221062(v=vs.85(.aspx
相关文章:
- 在类构造函数中定义结构变量的参数
- C++ 通过函数传递自定义结构
- 在C++中循环访问自定义结构列表的小问题
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 如何在C++中的.h文件中的类中定义结构
- 如何定义C结构:C-linkage和udt
- 结构向量中自定义结构函数的内存使用
- 类型转换自定义结构
- 使用结构绑定更改自定义结构的值
- 信号槽自定义结构问题
- 如何将unordered_set与自定义结构一起使用?
- 定义结构中没有默认构造函数的类
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 从自定义结构数组中提取数据
- 无法使用自定义结构的属性
- 通过引用将自定义结构的向量传递给 boost::compute 闭包或函数
- 如何从输入中定义的"external" int 定义结构中的数组大小
- 定义结构数组
- 在Cython中定义C 结构返回类型