• 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

  • 相关阅读:
    【2019-11-22】组件与模板 -- 显示数据
    【2020-01-22】模块
    【2020-01-21】迭代器和生成器
    【2020-01-17】高级类型
    【2020-01-08】类和对象
    【2019-01-07】类型和变量 + 语句
    【2020-01-07】C#语言元素
    【2020-01-07】C# 基本概念
    【2020-01-05】C#程序内部
    时间就是这样一点一点的度过的
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2295902.html
Copyright © 2020-2023  润新知