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一年后--“我心依旧”见证!