zoukankan      html  css  js  c++  java
  • win32 COM组件编写

    win32的com组件:

    1. 编辑idl,idl文件会生成对应的com class和com interface,例如

    [
    object,
    uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
    dual,
    nonextensible,
    pointer_default(unique)
    ]
    interface Iface : IDispatch
    {
    [id(1)] HRESULT SetChange(DWORD arg);
    };

    [
    uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
    ]
    coclass testClass
    {
    [default] interface Iface;
    };

    2.编辑.man文件,.man文件中会包含很多注册表相关信息,将新加入的类的注册信息写入.man文件中,COM组件在运行时,需要根据注册表中类ID找到类。

    HKEY_CLASSES_ROOTCLSIDxxxxx

    HKEY_CLASSES_ROOTInterfacexxxxx

    3.编辑.rgs文件,将注册信息写入.rgs文件,以便生成注册信息。

    4.编辑resource.h文件,将新加入的资源写入resource.h中,如#define IDR_TESTCLASS       112

    4.编辑.rc文件,加入对应的注册表信息,如:IDR_TESTCLASS  REGISTRY   "TestClass.rgs"

    5.编辑testClass.h和testClass.cpp文件,实现接口和类。

    6.进行编译,会生成一个xxx.h文件和xxx_i.c文件,xxx.h和xxx_i.h文件包含了新的idl文件生成的类和接口的声明,给其他使用这个dll或者exe的类使用。

    7.手动编辑注册表文件导入到target machine,运行程序,即可。

    8.测试:

    CComPtr<Iface> pComFace;

    hr = CoCreateInstance(CLSID_testClass, nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pComFace));
    根据hr的返回值判断是否成功。

  • 相关阅读:
    uvalive 3971 Assemble
    poj 1064 Cable master
    1130mysql explain中的type列含义和extra列的含义
    1128ORDER BY的原理
    1125Sending data
    1125MySQL Sending data导致查询很慢的问题详细分析
    1125mysqbinlog日志
    1122Shell脚本之利用mysqldump备份MySQL数据库
    1122从业务优化MYSQL
    1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
  • 原文地址:https://www.cnblogs.com/codefinder/p/com_programming.html
Copyright © 2011-2022 走看看