取自动化Com组件所有的方法、属性名称
2005-09-05 17:36
405 查看
Author:zfive5(zhaozidong)
Email :zfive5@yahoo.com.cn
最近由于工作原因,一直在接触com自动化的东西,一个字妙不可言,在这方面的长进也是这几个月来体会到的,废话不说了,代码来也......
#include "comdef.h"
void CTest1Dlg::OnOK()
{
// TODO: Add extra validation here
::CoInitialize(NULL);
{
COleDispatchDriver app;
if(!app.CreateDispatch("Excel.Sheet"))
{
::CoUninitialize();
return;
}
ITypeInfo *pType=NULL;
UINT nCount;
app.m_lpDispatch->GetTypeInfo(0,0,&pType);
app.m_lpDispatch->GetTypeInfoCount(&nCount);
FUNCDESC *pfunc;
VARDESC *pVar;
CString str="";
CString str1="";
CEdit *pWnd1=NULL;
CEdit *pWnd2=NULL;
pWnd1=(CEdit *)GetDlgItem(IDC_EDIT1);
pWnd2=(CEdit *)GetDlgItem(IDC_EDIT2);
for(int i=0;i>=0;i++)
{
if(pType->GetFuncDesc(i,&pfunc)!=S_OK)
{
break;
}
BSTR bstrName,bstrDoc;
DWORD id;
pType->GetDocumentation(pfunc->memid,&bstrName,&bstrDoc,&id,NULL);
str=bstrName;
str+=" ";
if(pfunc->invkind==DISPATCH_METHOD)
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd1->GetWindowText(str1);
str1+=str;
str1+="/r/n";
pWnd1->SetWindowText(str1);
}
else if(pfunc->invkind==INVOKE_PROPERTYGET)
{
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="GET";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
else if(pfunc->invkind==INVOKE_PROPERTYPUT)
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="PUT";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
else
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="REF";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
pType->ReleaseFuncDesc(pfunc);
}
}
::CoUninitialize();
}
这几天正在饿补《com原理与应用》,4年前的书!:(
对了此文为blog一年后--“我心依旧”见证!
Email :zfive5@yahoo.com.cn
最近由于工作原因,一直在接触com自动化的东西,一个字妙不可言,在这方面的长进也是这几个月来体会到的,废话不说了,代码来也......
#include "comdef.h"
void CTest1Dlg::OnOK()
{
// TODO: Add extra validation here
::CoInitialize(NULL);
{
COleDispatchDriver app;
if(!app.CreateDispatch("Excel.Sheet"))
{
::CoUninitialize();
return;
}
ITypeInfo *pType=NULL;
UINT nCount;
app.m_lpDispatch->GetTypeInfo(0,0,&pType);
app.m_lpDispatch->GetTypeInfoCount(&nCount);
FUNCDESC *pfunc;
VARDESC *pVar;
CString str="";
CString str1="";
CEdit *pWnd1=NULL;
CEdit *pWnd2=NULL;
pWnd1=(CEdit *)GetDlgItem(IDC_EDIT1);
pWnd2=(CEdit *)GetDlgItem(IDC_EDIT2);
for(int i=0;i>=0;i++)
{
if(pType->GetFuncDesc(i,&pfunc)!=S_OK)
{
break;
}
BSTR bstrName,bstrDoc;
DWORD id;
pType->GetDocumentation(pfunc->memid,&bstrName,&bstrDoc,&id,NULL);
str=bstrName;
str+=" ";
if(pfunc->invkind==DISPATCH_METHOD)
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd1->GetWindowText(str1);
str1+=str;
str1+="/r/n";
pWnd1->SetWindowText(str1);
}
else if(pfunc->invkind==INVOKE_PROPERTYGET)
{
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="GET";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
else if(pfunc->invkind==INVOKE_PROPERTYPUT)
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="PUT";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
else
{
char buf[20];
str+=_bstr_t(itoa(pfunc->cParams,buf,10));
pWnd2->GetWindowText(str1);
str1+=str;
str1+=" ";
str1+="REF";
str1+="/r/n";
pWnd2->SetWindowText(str1);
}
pType->ReleaseFuncDesc(pfunc);
}
}
::CoUninitialize();
}
这几天正在饿补《com原理与应用》,4年前的书!:(
对了此文为blog一年后--“我心依旧”见证!
相关文章推荐
- Javascript遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- php调用com组件,如何能查看到它的所有方法和属性
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- RunTime应用--获取类中所有的私有变量,属性,和方法
- C# 利用反射,遍历获得一个类的所有属性名,方法名,成员名
- C#获取所有SQL Server数据库名称的方法
- 显示js对象所有属性和方法的函数
- IHTMLDocument2的所有成员、属性、方法、事件
- 通过反射获取类的所有属性和方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- c#获取数据库中所有表名称的方法
- Win32页上的所有控件属性与方法
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法
- 传入某个属性的SET方法的隐含参数的名称是什么?
- java中遍历类所有属性和方法
- 遍历想要属性里面的所有方法
- TCustomControl绘制自己和图形子控件共四步,五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示),TWinControl关键属性方法速记
- 无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法