com:组件对象模型,客户端通过com api获得com对象,来调用com的方法。
com对象:通过com api函数CoCreateInstance()产生com对象,这个函数需要指定两个128位的id,一个是dll/exe文件的id,一个是com的类id,在生成com的时候,系统注册表会记录这两个id,并把他们各自对应的dll/exe文件,类名记录下来,当调用这个api函数的时候,会在注册表中找到对应的dll/exe,类名,进行加载。如果不在同一台机子上,在客户端和服务器端会各自生成代理/桩子,来完成对用户透明的通信(远程这个地方,还没理解透,待续)。
每产生一个类对象,基类提供一个对象的增加,删除操作,用来控制对象的引用,生成一个类对象就加1,删除一个类对象就减1,如果是0就服务器端就删除这个类对象。
怎样编写一个com对象:
通过接口定义语言IDL,在c++语法的基础增加了一些特有的语法比如[ ]...可以定义com特有的一些东西,例如代理/桩子如果接受,发送参数,如何创建对象等等。
微软的接口定义语言编译器(MIDL)编译器用来编译这个IDL文件,会产生一些h文件,其中一个h文件定义了抽象类,以后的服务器对象就从这个抽象类进行派生,还有一个c文件,包含GUID用来标识这个dll/exe文件。客户端必须知道这个GUID才能调用DLL/EXE,可以用智能指针封装就行调用,客户端就不必麻烦的记住GUID这个东东。还有些代理/桩子文件,等等(还没明白,待续)。
未完待续....