zoukankan      html  css  js  c++  java
  • COM笔记COM库函数

    COM在OLE32.DLL和 OLE32.LIB定义了一些常用的函数。在使用这些函数前要先调用CoInitialize来初始化COM库。当进程不再需要使用COM库函数时要调用CoUninitialize.

    原型:


    WINOLEAPI CoInitialize(__in_opt LPVOID pvReserved);
    // pvReserved为NULL
    WINOLEAPI_(void) CoUninitialize(void);

    由于对每一个进程,COM库只需初始化一次,并且由于COM是用于创建组件的,因此进程中组件无需初始化COM库。COM库的初始化一般只是在EXE中进行,而DLL中则无需进行。

    关于OleInitialize的使用

    OLE是建立在COM基础之上的,它增加了对类型库、剪贴板、拖放、AcitiveX文档、自动化以及AcitveX控件的支持。在使用这些特性时,应调用OleInitialize及OleInitialize,但如果不使用那些额外的功能,使用Ole***会造成资源的浪费。

    看例子:http://www.cnblogs.com/fangyukuan/archive/2010/04/09/1708651.html

    #include "stdafx.h"
    #include
    <iostream>
    using namespace std;
    #include
    "http://www.cnblogs.com/ATLComDemo/ATLComDemo/ATLComDemo_i.c"
    #include
    "http://www.cnblogs.com/ATLComDemo/ATLComDemo/ATLComDemo_i.h"

    int _tmain(int argc, _TCHAR* argv[])
    {
    //声明HRESULT和Ikuan接口指针
    Ikuan * IkuanATL = NULL;

    HRESULT hr
    = CoInitialize(NULL); //初始化COM

    //使用SUCCEEDED宏并检查我们是否能得到一个接口指针
    if(SUCCEEDED(hr))
    {
    hr
    = CoCreateInstance(CLSID_kuan,
    NULL,
    CLSCTX_INPROC_SERVER,
    IID_Ikuan,
    (
    void **)&IkuanATL);
    //如果成功,则调用AddNumbers方法,否则显示相应的出错信息
    if(SUCCEEDED(hr))
    {
    long ReturnValue;
    IkuanATL
    ->Add(8,9,&ReturnValue);
    cout
    << "The answer for 8+9 is:" << ReturnValue << endl;
    IkuanATL
    ->Release();
    }
    else
    {
    cout
    << "CoCreateInstance Failed." << endl;
    }
    }
    CoUninitialize();
    //释放COM
    return 0;
    }

    本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/11/1756677.html 

  • 相关阅读:
    Promise小结 ES6异步编程
    XLNet模型
    BERT模型
    Transformer模型
    注意力机制(Attention Mechanism)
    序列到序列模型(seq2seq)
    【Pandas-附件2】查询手册
    【Pandas-附件1】读取excle和csv具体函数
    【pandas-21】实践-同比和环比指标
    【pandas-20】实践(泰坦尼克沉船事件)-特征处理
  • 原文地址:https://www.cnblogs.com/fangyukuan/p/1756677.html
Copyright © 2011-2022 走看看