能在一个IDL文件中写两个coclass么?

firecityplans 2009-10-21 09:13:58
在COM编程中,要用到外部组件与内部组件,因此要产生两个DLL文件。
想在一个类型库中写两个coclass。以期产生两个dll文件。不知这样行不?因为要共用共同的接口。

同时这两个组件是应当分别创建在两个project中的。只要在注册表中注册,这样的话外部组件调用内部组件应当是没问题的吧?
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
firecityplans 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rendao0563 的回复:]
一个类型库N个接口是可以的.但是2个dll就是两个类型库了.
[/Quote]

也就是说一个类型库里不能有两个coclass了?

下面这样写行不?

import "oaidl.idl";
import "ocidl.idl";

[
uuid(2B35F686-BA52-491a-A1FB-AF71605BE166),
helpstring(" interface IX"),
object,
pointer_default(unique)
]
interface IX : IUnknown
{
HRESULT Fx() = 0;
};

[
uuid(9970D64A-22BB-4f54-A55B-29D8A8708D73),
helpstring(" interface IY"),
object,
pointer_default(unique)
]
interface IY : IUnknown
{
HRESULT Fy() = 0;
};

[
uuid(1B17496D-7195-483a-98EB-1BFA9EAA2F4F),
helpstring(" interface IZ"),
object,
pointer_default(unique)
]
interface IZ : IUnknown
{
HRESULT Fz() = 0;
};
[
uuid(20963F69-E225-4901-8E91-17E18656EBB8),
helpstring("aggratelib 1.0 type library !"),
version(1.0)
]
library aggrationLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(c159eb15-f469-45c6-a06a-0a5b1f94d741),
helpstring(" aggration class ")
]
coclass aggration
{
[default] interface IX;
};


[
uuid(0300B615-C7E5-4d4b-8414-80876187C170),
helpstring(" aggrate2 class ")
]
coclass aggration2
{
[default] interface IY;
};
};
rendao0563 2009-10-21
  • 打赏
  • 举报
回复
一个类型库N个接口是可以的.但是2个dll就是两个类型库了.
jameshooo 2009-10-21
  • 打赏
  • 举报
回复
可以
rendao0563 2009-10-21
  • 打赏
  • 举报
回复
真不知道你怎么理解成 一个类型库里不能有两个coclass
rendao0563 2009-10-21
  • 打赏
  • 举报
回复
类型库和dll是一对一的关系.
类型库和接口(应该就是你说的那个coclass)是一对多.

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧