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