我如何在我的 COM 库中定义这个结构?
How can I define this struct in my COM library?
我在 Visual Studio 2015 年创建了一个新的 ATL 项目。我添加了一个新的简单 ATL 对象,在库中我试图定义一个 struct
以便我可以传递这个 struct
在我的 COM 实现中。这是我的 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;
};
};
当我尝试编译它时,出现以下错误:
Error MIDL2312 illegal syntax unless using mktyplib compatibility mode
: 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
,这是报告错误编号和消息的标准方式。
我在 Visual Studio 2015 年创建了一个新的 ATL 项目。我添加了一个新的简单 ATL 对象,在库中我试图定义一个 struct
以便我可以传递这个 struct
在我的 COM 实现中。这是我的 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;
};
};
当我尝试编译它时,出现以下错误:
Error MIDL2312 illegal syntax unless using mktyplib compatibility mode : 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
,这是报告错误编号和消息的标准方式。