|
这样,组件和客户就完全被分隔开了,而连接它们的只有接口以及一个CreateInstance的函数。 以上就是COM的基本原理了。当然,我前面也说了,COM其实是一套规范,它定义了很多标准,比如COM规定每个接口都必须继承于一个叫IUnknown的接口。我这里基本上没有提及它的这些标准,只是希望能通过对它进行一个简单的模拟来说清楚它的实现原理。下面就给出我模拟COM机制实现的一套COM的雏形,希望能对大家理解COM有帮助。 1、实现了组件ComponentB的ComponentDll.dll: //Interface.h //接口 class InterfaceA { public: virtual void Fun1()=0; virtual void Fun2()=0; }; //Component.h //组件(实现了接口InterfaceA) class ComponentB: public InterfaceA { public: virtual void Fun1() { printf("Fun1\n"); } virtual void Fun2() { printf("Fun2\n"); } }; //ComponentDll.cpp //CreateInstance函数 ComponentB instance; extern "C" _declspec(dllexport) InterfaceA *CreateInstance() { InterfaceA *pIA=&instance; return pIA; } 2、客户Client.exe: //Client.cpp #include "Interface.h" #pragma comment(lib,"ComponentDll") int main(int argc, char* argv[]) { InterfaceA *pIA=0; pIA=CreateInstance(); if(pIA!=0) pIA->Fun1(); return 0; }
|