社区
ATL
帖子详情
COM组件IDL的问题
utada776
2008-09-22 10:49:28
我对组件不太了解,问个初级问题
我写一个IDL文件,编译之后分别生成客户端和服务器端。
那么客户端就能按照接口定义的格式 调用服务器端的应用对吗?
那假如 服务器端和客户端 即为客户端也为服务器端,两者相互调用,这样IDL文件应该怎么写?
换句话说,IDL是只描述了客户端调用服务器端的接口吗?
如果系统里 有好多组件,每个组件即为服务器也为客户端 是不是我要定义很多个IDL?
是否我的理解有问题,请指出,谢谢。
...全文
249
6
打赏
收藏
COM组件IDL的问题
我对组件不太了解,问个初级问题 我写一个IDL文件,编译之后分别生成客户端和服务器端。 那么客户端就能按照接口定义的格式 调用服务器端的应用对吗? 那假如 服务器端和客户端 即为客户端也为服务器端,两者相互调用,这样IDL文件应该怎么写? 换句话说,IDL是只描述了客户端调用服务器端的接口吗? 如果系统里 有好多组件,每个组件即为服务器也为客户端 是不是我要定义很多个IDL? 是否我的理解有问题,请指出,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paerxiushi
2008-09-24
打赏
举报
回复
对于一般的进程外服务器而言,那个IDL必须包含在服务端与客户端的两边,不然就客户端就无法将参数调整给服务端使用.
对于进程外的调度服务器而言,也就是实现了IDispatch的双接口,服务端需要IDL,而客户端则不需要IDL,因为IDL已经被注册到类型库之中,所以客户端可以不需要接口的头文本就可以调用组件了.
对于进程内服务器而言,如果组件仅适用于VC,而且不考虑多线程情况,客户端与服务端不需要使用IDL
连接点和事件模型都是客户端与服务端相互调用的例子,事件模型用在ActiveX控件中.
IDL是只描述了客户端调用服务器端的接口吗?
____________________________________
是的,使用MIDL对IDL进行编辑可产生代理与残根DLL.如果组件种类许多,考虑到需要对组件进行分类,就应该定义多个IDL.一个组件可以包含一个或多个IDL.一般事件模型中,客户需要定义自己的IDL与组件.
wangweixing2000
2008-09-24
打赏
举报
回复
idl只是为了定义之间的接口,没有那么复杂,谁做客户谁做服务都一样就把它当成dll来看,只不过它可以跨语言而已:)
至于exe类型的服务,那就不一样了,他只能做为服务用了:)
UDX协议
2008-09-23
打赏
举报
回复
idl是描述性语言,他主要描述的是能做什么(方法)?发生什么?(事件)?
注册表资源帮我们知道他们在什么地方。
liyinlei
2008-09-22
打赏
举报
回复
LZ还是好好去看COM。
IDL只是描述接口的语言
hbuzzd
2008-09-22
打赏
举报
回复
个人理解:
我觉得并不时说IDL编译之后就生成了客户端和服务端。而只是提供了一个供外部使用的接口,其实组件内部也有聚合和包含并不一定要扩展到Client-Server的模型。还有连接点的技术也是支持了服务端对客户端的回调功能的。
至于IDL应该是要在每一个组件服务端都有定义自己的接口。这个对应于组件服务端所能提供的服务功能来说应该也还是很简单的。如果是太简单或者可以整合到内部使用的,应该就没有必要使用组件来完成了。个人意见不知道对不对。
jameshooo
2008-09-22
打赏
举报
回复
很大的问题,大到不知道如何解释
IDL
与C#的数据传递方法研究
COM
_
IDL
_CONNECT
IDL
与C#的数据传递方法研究
COM
_
IDL
_CONNECT
c++开发一个简单累加的
COM
组件
1.
COM
组件
的实现 2.
COM
组件
的调用
vc6调用matlab编译的
com
组件
示例1
vc6通过代码 调用 matlab编译生成的
com
组件
mfile ->
com
组件
-> vc6 exe
基于ATL的
COM
组件
开发实例(VS2010)
使用ATL工具设计
COM
组件
实现对串口的操作
VC++
COM
组件
开发相关实例
一
组件
基础 1 软件开发的阶段 1.1 结构化编程 采用自顶向下的编程方式,划分模块 和功能的一种编程方式。 1.2 面向对象编程 采用对象的方式,将程序抽象成类, 模拟现实世界,采用继承、多态的方式 设计软件的一种编程方式。 1.3 面向
组件
编程 将功能和数据封装成二进制代码,采用 搭积木的方式实现软件的一种编程方式。 2
组件
和优点 2.1
组件
- 实际是一些可以执行的二进 制程序,它可以给其他的应用程序、操 作系统或其他
组件
提供功能 2.2 优点 2.2.1 可以方便的提供软件定制机制 2.2.2 可以很灵活的提供功能 2.2.3 可以很方便的实现程序的分布式 开发。 3
组件
的标准 -
COM
(
Com
ponent Object Model ) 3.1
COM
是一种编程规范,不论任何开发语言 要实现
组件
都必须按照这种规范来实现。
组件
和开发语言无关。 这些编程规范定义了
组件
的操作、接口的 访问等等。 3.2
COM
接口
COM
接口是
组件
的核心,从一定程度上 讲"
COM
接口是
组件
的一切".
COM
接口给用户提供了访问
组件
的方式. 通过
COM
接口提供的函数,可以使用
组件
的功能. 4
COM
组件
4.1
COM
组件
-就是在Windows平台下, 封装在动态库(DLL)或者可执行文件(EXE) 中的一段代码,这些代码是按照
COM
的 规范实现. 4.2
COM
组件
的特点 4.2.1 动态链接 4.2.2 与编程语言无关 4.2.3 以二进制方式发布 二
COM
接口 1 接口的理解 DLL的接口 - DLL导出的函数 类的接口 - 类的成员函数
COM
接口 - 是一个包含了一组函数指针 的数据结构,这些函数是由
组件
实现的 2 C++的接口实现 2.1 C++实现接口的方式,使用抽象类 定义接口. 2.2 基于抽象类,派生出子类并实现 功能. 2.3 使用 interface 定义接口 interface ClassA { }; 目前VC中,interface其实就是struct 3 接口的动态导出 3.1 DLL的实现 3.1.1 接口的的定义 3.1.2 接口的实现 3.1.3 创建接口的函数 3.2 DLL的使用 3.2.1 加载DLL和获取创建接口的函数 3.2.2 创建接口 3.2.3 使用接口的函数 4 接口的生命期 4.1
问题
在DLL中使用new创建接口后,在用户 程序使用完该接口后,如果使用delete 直接删除,会出现内存异常. 每个模块有自己的内存堆(crtheap) EXE - crtheap DLL - crtheap new/delete/malloc/free默认情况 下都是从自己所在模块内存堆(crtheap) 中分配和施放内存.而各个模块的 这个内存堆是各自独立.所以在DLL中 使用new分配内存,不能在EXE中delete. 4.2 引用计数和AddRef/Release函数 引用计数 - 就是一个整数,作用是 表示接口的使用次数 AddRef - 增加引用计数 +1 Release - 减少引用计数 -1, 如果 当引用计数为0,接口被删除 4.3 使用 4.3.1 创建接口 4.3.2 调用AddRef,增加引用计数 4.3.3 使用接口 4.3.4 调用Release,减少引用计数 4.4 注意 4.4.1 在调用Release之后,接口指针 不能再使用 4.4.2 多线程情况下,接口引用计数 要使用原子锁的方式进行加减 5 接口的查询 5.1 每个接口都具有唯一标识 GUID 5.2 实现接口查询函数 QueryInterface 6 IUnknown 接口 6.1 IUnknown是微软定义的标准接口 我们实现所有接口就是继承这个接口 6.2 IUnknown定义了三个函数 QueryInterface 接口查询函数 AddRef 增加引用计数 Release 减少引用计数 7 接口定义语言 -
IDL
(Interface Definition Language ) 7.1
IDL
和M
IDL
IDL
- 定义接口的一种语言,与开发 语言无关. M
IDL
.EXE - 可以将
IDL
语言定义接口, 编译成C++语言的接口定义 7.2
IDL
的基础 import "XXXX.
idl
" [ attribute ] interface A : interface_base { } 7.2.1 Import 导入,相当于C++的 #include 7.2.2 使用"[]"定义区域,属性描述 关键字 1) object - 后续是对象 2) uuid - 定义对象GUID 3) helpstring - 帮助信息 4) version - 版本 5) point_default - 后续对象 中指针的默认使用方式 比如: uniqune - 表示指针可以 为空,但是不能修改 7.2.3 对象定义 1) 父接口是IUnknown接口 2) 在对象内添加函数,函数定义必须 是返回 HRESULT. HRESULT是32位整数,返回函数是否 执行成功,需要使用 SUCCESSED和 FAILED宏来判断返回值.
ATL
3,248
社区成员
48,531
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章