• COM组件里自动化接口与普通接口的转换


    View Code
    #include<stdio.h>
    #include<iostream>
    using namespace std;
    #include "huchao.h"
    #include "huchao_i.c"
    #include "atlbase.h"

    int main(int argc, char* argv[])
    {
    Icom *Imycom; //COM接口1的初始化
    HRESULT hResult; //HRESULT返回值用于看函数执行状态
    GUID g_clsid; //定义一个标识符
    ::CoInitialize(NULL);//初始化com库
    hResult=CLSIDFromProgID(L"huchao.com",&g_clsid);//获取CLSID
    if(FAILED(hResult))
    {
    printf("CLSIDFromProgID() failed!");
    }

    //IDispatch *pIDisp;//定义IDispatch 接口指针

    hResult = CoCreateInstance(g_clsid,//实例化一个com对象
    NULL,
    CLSCTX_INPROC_SERVER,
    IID_Icom,
    (void **)&Imycom);
    if(FAILED(hResult))
    {
    printf("2222");
    }
    //创建自动化对象并返回IDispatch 接口指针

    CComBSTR BSFunName(L"Lower"); // 准备取得 Add 函数的序号 DispID,为了能使用CComBSTR,别忘了头文件#include "atlbase.h"
    DISPID dispID; // 定义一个 DISPID序号对象
    hResult = Imycom->GetIDsOfNames( // 根据函数名,取得DISPID
    IID_NULL,
    &BSFunName, // 函数名
    1, // BSFunName中的元素个数
    LOCALE_SYSTEM_DEFAULT, // 使用系统默认的语言环境
    &dispID ); // 返回值DISPID

    if (FAILED(hResult))
    {
    printf("GetIDsOfNames failed!\n");
    return -2;
    }

    VARIANT vResult;
    VARIANT str[1];//给字符串赋值

    str[0].bstrVal=L"GASD";

    DISPPARAMS dispParams = {str,NULL,1,0}; // 把参数包装在这个结构中
    hResult = Imycom->Invoke( // 调用Invoke方法
    dispID, // 指定dispID
    IID_NULL,
    LOCALE_SYSTEM_DEFAULT, // 使用系统默认的语言环境
    DISPATCH_METHOD, // 调用的是方法,不是属性
    &dispParams, // 参数
    &vResult, // 返回值
    NULL, // 不考虑异常处理
    NULL);


    if(FAILED(hResult))
    {
    printf("3333");
    return 0;
    }

    printf("转化后的字符串:%ls\n",vResult.bstrVal);

    Icom2 *Imycom2;
    hResult=Imycom->QueryInterface(IID_Icom2, (void**)&Imycom2);//使用QueryInterface()使用进行切换

    double temp;

    hResult=Imycom2->div(2,2,&temp);

    if(FAILED(hResult))
    {
    printf("55555");
    return 0;
    }

    printf("%lf\n",temp);

    hResult=Imycom2->square(2,2,2,&temp);

    if(FAILED(hResult))
    {
    printf("55555");
    return 0;
    }
    printf("%lf\n",temp);

    return 0;
    }

    开始用IDispatch接口进行字符串的小写转换调用,

    两个接口之间使用QueryInterface()使用进行切换:从接口1转到接口2

  • 相关阅读:
    [Codeforces 1245D] Shichikuji and Power Grid (最小生成树)
    [BZOJ 1535] [Luogu 3426]SZA-Template (KMP+fail树+双向链表)
    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
    [Codeforces 1246B] Power Products (STL+分解质因数)
    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
    [BZOJ5306] [HAOI2018]染色(容斥原理+NTT)
    [Codeforces 1239D]Catowise City(2-SAT)
    [BZOJ 3527] [ZJOI2014]力(FFT)
    [BZOJ 3456]城市规划(cdq分治+FFT)
    【2-SAT(最小字典序/暴力染色)】HDU1814-Peaceful Commission
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2295902.html
Copyright © 2020-2023  润新知