现在的位置: 首页 > 综合 > 正文

《COM技术内幕》阅读笔记5~6章

2018年10月09日 ⁄ 综合 ⁄ 共 1217字 ⁄ 字号 评论关闭

动态链接:
    extern "C"  dumpbin -exports cmpnt1.dll
    .def: library "cmpnt1.dll"
          exports
                 CreateIinstance @1 PRIVATE
    动态加载
    客户,组件划分:客户client.cpp  组件cmpnt.cpp cmpnt.def   共享:iface.h guids.cpp  程序清单

HRESULT GUID  注册表 COM库:
    HRESULT:结构 常用返回值 HRESULT查找(十六进制直接查找,FACILITY_WIN32查找,FormatMessage)
             hr == E_FAIL hr == S_OK 错误 应该FAILED(hr)
             所有期望在远程机器上运行的函数都应返回HRESULT
    GUID:为什么使用(保证时间空间上唯一) 定义DEFINE_GUID(extern "C" const GUID IID_IX) GUID比较(四种方法) GUID传递用引用(REFIID等价const IID&, REFCLSID REFGUID)
    注册表:HKEY_CLASS_ROOT->CLSID->{XXXXX-XXX-XXX-XXX}->InprocServer32 默认值是dll文件名
            progID HKEY_CLASS_ROOT->ProgID 格式 注册表格式 与版本无关的ProgID  CLSIDFromProgID
    自注册:extern "C" HRESULT _stdcall(STDAPI) DllRegisterServer()
    组件类别:{组件,组件,...}   Component Category Manager,CLSID_StdComponentCategoriesMgr  ICatRegister ICatInformation
    COM库:CoInitialize CoUninitialize每个进程初始化一次 一般在exe中初始化 dll不初始化
           OLE OleInitialize OleUninitialize OLE在COM基础上增加了类型库,剪切板,拖放,ActiveX文档,自动化,ActiveX控件的支持
           内存管理,组件中分配一块内存,通过输出参数传递给客户 内存分配器让客户可以删除内存 IMalloc CoGetmalloc  IMalloc::Alloc IMalloc::Free   CoTaskMemAlloc CoTaskMemFree
           将字符串转成CLSID,StringFromGUID2(UNICODE),wcstombs(ANSI)  StringFromCLSID StringFromIID StringFromGUID2,CLSIDFromString,IIDFromString

抱歉!评论已关闭.