COM实现
l  进程内组件【DLL
 (1)  C++语言中,为了使编制的DLL程序更为通用,一般指定DLL的引出函数使     _stdcall 调用习惯,如果使用了_cdecl调用习惯,则有些编程语言环境就不能使用这  DLL程序。C++编译器为DLL程序的每个引出函数生成了一个修饰名,这些修饰名对于不同的编译器并不兼容,因此,从通用性的角度出发,我们在每个函数定义前面
加上extern “C”说明符。
Extern “C” int _stdcall myFunction(int n);
然后按照传统的编程方法,写一个DEF文件,描述DLL程序模块信息。
;DictComp.def : Declares the module parameters for the DLL.
LIBRARY “DictComp”
DEscRIPTION ‘Dictionary component windows Dynamic Link Library”
EXPORTS
   CreateObject @ 1
或者不用DEF文件使用_declspec(dllexport)
Extern “C” _declspec(dllexport) int _stdcall myFunction(int n);
(2) 客户端程序:有三个系统函数可用于操作DLL程序,装载DLL模块寒素LoadLibrary 取引出函数地址的函数GetProcAddress, 释放DLL程序的函数FreeLibrary
     hModual =  LoadLibrary(“DictComp.dll”);
     if(hModual == NULL)
             return 1;
     typedef BOOL(_stdcall* MyFunctiointype)(const CLSID& clsid, const IID& iid, void **ppv);
   MyFunctionType fnCreateObject;
   fnCreateObject = (MyFunctioinType)GetProcAddress(hModual, “CreateObject”);
   fnCreateObject(clsid, iid, ppv);
   …..
   FreeLibrary(hModual);
l  进程外组件【exe】【P58
问题:
(1)    一个进程如何调用另一个进程中的函数;
(2)    参数如何从一个进程被传递到另一个进程中。
Windows平台上,在不同进程之间进行通信的办法很多,包括动态数据交换(DDE),命名管道(named pipe)或者共享内存等等呢个。--COM采用了本地过程调用(LPC)和远程过程调用(RPC)的方法进行进程之间的通信,其中LPC用于在同一机器上得不同进程之间进行通信;而RPC用于在不同机器上的进程之间进行通信。LPCRPC的机理相同,但由于RPC需要通过网络传递信息,因此RPCLPC更为复杂,而LPC相当于一个优化了的RPC实现。
实现进程外组件工作:除了实现组件程序外,还应该实现代理DLL存根DLL两个程序模块。 而代理DLL和存根DLL只与COM接口有关,它只负责接口成员函数调用过程中的中间处理工作,所以我们应该针对接口实现代理DLL和存根DLL 如果我们使用COM预定义的标准接口或者OLE接口,则可以直接使用系统提供的DLLCOM库会为我们处理这些细节。