COM对象创建过程总结(进程外和进程内)
2007-02-08 23:19
330 查看
以前研究过DLL的,刚刚研究了一下EXE的情况,现在总结一下:
进程内DLL的情况下:
客户调用CoCreateInstance
COM调用CoGetClassObject想获得类厂的接口指针
CoGetClassObjec通过注册表找到Dll
M加载该DLL到客户的进程中
调用该DLL的DllGetClassObject(CLSID, IID_IClassFactory, &ppv),返回类厂对象的IClassFactory的接口
COM调用IClassFactory->CreateInstance(pUnkouter, IID, &ppvObject),创建对象,返回接口指针
COM把接口指针作为结果返回
进程外EXE的情况下:
客户调用CoCreateInstance
COM调用CoGetClassObject
CoGetClassObject通过注册表找到EXE
启动EXE
EXE在启动过程中会调用CoRegisterClassObject(CLSID, pUnk, dwClsContext, flags, &dwRegister)注册类厂对象
如果前面的对CoRegisterClassObject的调用用到了REGCLS_SUSPENDED标志,EXE调用CoResumeClassObject通知COM该对象已经做好准备接受请求(如果服务器支持多线程的话应该要这么做,避免Race Condition)
CoGetClassObject取得之前CoRegisterClassObject所Register的指针(经过Marshal的)
获得了类厂对象的接口指针之后,下面的操作和进程内DLL的情况类似
进程内DLL的情况下:
客户调用CoCreateInstance
COM调用CoGetClassObject想获得类厂的接口指针
CoGetClassObjec通过注册表找到Dll
M加载该DLL到客户的进程中
调用该DLL的DllGetClassObject(CLSID, IID_IClassFactory, &ppv),返回类厂对象的IClassFactory的接口
COM调用IClassFactory->CreateInstance(pUnkouter, IID, &ppvObject),创建对象,返回接口指针
COM把接口指针作为结果返回
进程外EXE的情况下:
客户调用CoCreateInstance
COM调用CoGetClassObject
CoGetClassObject通过注册表找到EXE
启动EXE
EXE在启动过程中会调用CoRegisterClassObject(CLSID, pUnk, dwClsContext, flags, &dwRegister)注册类厂对象
如果前面的对CoRegisterClassObject的调用用到了REGCLS_SUSPENDED标志,EXE调用CoResumeClassObject通知COM该对象已经做好准备接受请求(如果服务器支持多线程的话应该要这么做,避免Race Condition)
CoGetClassObject取得之前CoRegisterClassObject所Register的指针(经过Marshal的)
获得了类厂对象的接口指针之后,下面的操作和进程内DLL的情况类似
相关文章推荐
- COM对象创建过程总结(进程外和进程内)
- COM对象创建过程总结(进程外和进程内)
- COM对象创建过程总结(进程外和进程内)
- 进程内COM对象的创建过程(AC5)
- 进程内COM对象的创建过程(AC5)
- COM对象创建过程详细分析
- Android虚拟机学习总结Dalvik虚拟机进程和线程的创建过程分析
- 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结
- [自学问题总结] java中的对象创建过程
- Com对象创建过程
- 总结对象的创建过程
- CoUninitialize进程内COM对象创建规则
- Linux内核设计第六周学习总结 分析Linux内核创建一个新进程的过程
- java对象创建的过程总结
- 面试总结之Java中创建对象过程及方式
- Java知识总结——对象创建过程
- 进程创建与相关函数等知识点总结
- MFC笔记-SDI窗口创建过程总结
- 创建 VirtualBoxClient COM 对象失败. 应用程序将被中断的解决办法
- Java基础知识总结(一)创建和销毁对象