看很多人都在问关于结构在COM中的定义,现在统一回答!
bbq1980,allofeagles你们到时候把提问的分都给我呀!^_^
以vc7为例,生成atl的简单对象步骤就省略了!
1.工程中添加一个新的idl文件,例如就叫MyType.idl:
内容如下:
import "oaidl.idl";
import "ocidl.idl";
struct MyPoint
{
long x;
long y;
};
然后用midl.exe编译(要去命令行)
然后在你接口定义的主头文件(包含你的interface和coclass的那个)
加上:
#include "MyType.h"
我的头文件内容如下:
// IIDL.h : CIIDL 的声明
#pragma once
#include "resource.h" // 主符号
#include "MyType.h"
// IIIDL
[
object,
uuid("82C260C9-3620-49C4-9B8F-CDB3A5189187"),
dual, helpstring("IIIDL 接口"),
pointer_default(unique)
]
__interface IIIDL : IDispatch
{
[id(1), helpstring("方法Spin")] HRESULT Spin([in] MyPoint s);
[propget, id(2), helpstring("属性 ParameterType")] HRESULT ParameterType([in] LONG Index, [out, retval] SIMPL* pVal);
};
// CIIDL
[
coclass,
threading("apartment"),
vi_progid("IDL.IIDL"),
progid("IDL.IIDL.1"),
version(1.0),
uuid("C742452F-A021-44BF-B726-70FA7A751311"),
helpstring("IIDL Class")
]
class ATL_NO_VTABLE CIIDL :
public IIIDL
{
public:
CIIDL()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
private:
SIMPL _inst;
public:
STDMETHOD(Spin)(MyPoint s);
STDMETHOD(get_ParameterType)(LONG Index, SIMPL* pVal);
};
然后再编译工程!
好了,输出结构的com做好了!