解决方案 »
- 将byte数组的内容转换成BSTR类型
- 大家来帮忙了,我在access文件明明设了用户名和密码了,我在用ADO访问这个access数据库文件时并没有设用户名和密码还是能访问数据库,这是怎么回事啊?????????
- >>>>>>>>>>>欢迎喜欢网络编程的加入[15045450]QQ群<<<<<<<<<<<<<
- ListCtrl控件中,REPORT模式,多列,为什么我只能选第一列?
- 一个类与类之间传值的问题.高手教我~
- 请教单文档窗口中显示位图文件问题
- 请高人帮助,等待回复中
- OnPaint()消息处理函数很奇怪的问题,编了这么多年都没有发现过呀!!
- 请问哪有charles petzold的<<Programming Windows 95>>的中文电子版下载???
- 重金征集:关于IE编程的问题:怎样在IE工具栏上加入自己的工具
- opencv 提取同心圆圆心坐标和半径
- 关于QQ授权登陆的问题
#include"1.h"void my_process();int main()
{
CoInitializeEx(NULL,COINIT_MULTITHREADED);
//添加我们的代码;
initialize(); my_process();
CoUninitialize();
_gettchar();
return 0;
}void my_process()
{
IDispatch* pApp,*pDocs,*pDoc,*pSelection;
HRESULT hr;
OLECHAR* name=L"Visible";
DISPID id,putid;
DISPPARAMS param;
VARIANT var;
VARIANT A_Param[4];
IConnectionPointContainer* pIConnectionPointContainer;
IConnectionPoint* pIConnectionPoint;
DWORD cookie;
hr=CoCreateInstance(&CLSID_App,NULL,CLSCTX_LOCAL_SERVER,&IID_App,&pApp);
if(!SUCCEEDED(hr))
{
//错误处理代码;
} hr=pApp->lpVtbl->QueryInterface(pApp,&IID_IConnectionPointContainer,(void**)&pIConnectionPointContainer); hr=pIConnectionPointContainer->lpVtbl->FindConnectionPoint(pIConnectionPointContainer,&IID_AppEvent,&pIConnectionPoint); hr=pIConnectionPoint->lpVtbl->Advise(pIConnectionPoint,(IUnknown*)&My_IDispatch,&cookie); pIConnectionPointContainer->lpVtbl->Release(pIConnectionPointContainer);
hr=pApp->lpVtbl->GetIDsOfNames(pApp,&IID_NULL,&name,1,LOCALE_SYSTEM_DEFAULT,&id); //_tprintf(L"%d\n",id); var.boolVal=1;
var.vt=VT_BOOL;
putid=DISPID_PROPERTYPUT; param.cArgs=1;
param.cNamedArgs=1;
param.rgdispidNamedArgs=&putid;
param.rgvarg=&var; //显示被打开的Word。
hr=pApp->lpVtbl->Invoke(pApp,id,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,
¶m,NULL,NULL,NULL); param.cArgs=0;
param.cNamedArgs=0;
param.rgdispidNamedArgs=NULL;
param.rgvarg=NULL;
//获取Docuements对象的IDispatch指针;
hr=pApp->lpVtbl->Invoke(pApp,0x6,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
¶m,&var,NULL,NULL); //pDoc就是Documents接口的指针;
pDocs=var.pdispVal;
param.cArgs=4;
param.cNamedArgs=0;
param.rgdispidNamedArgs=NULL;
param.rgvarg=A_Param; param.rgvarg[3].vt=VT_BSTR;
param.rgvarg[3].bstrVal=NULL; param.rgvarg[2].vt=VT_BOOL;
param.rgvarg[2].boolVal=FALSE; param.rgvarg[1].vt=VT_I4;
param.rgvarg[1].lVal=0; param.rgvarg[0].vt=VT_BOOL;
param.rgvarg[0].boolVal=TRUE; //新建一个文档,获得文档接口Document的接口指针;
hr=pDocs->lpVtbl->Invoke(pDocs,0xe,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,
¶m,&var,NULL,NULL); //pDoc就是文档的接口指针
pDoc=var.pdispVal; param.cArgs=0;
param.cNamedArgs=0;
param.rgdispidNamedArgs=NULL;
param.rgvarg=NULL; //选中当前文档内容;
hr=pDoc->lpVtbl->Invoke(pDoc,0xffff,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,
¶m,NULL,NULL,NULL); //获得Selection对象接口指针;
/*
pApp->lpVtbl->Invoke(pApp,0x5,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
¶m,&var,NULL,NULL);*/
hr=pApp->lpVtbl->Invoke(pApp,0x5,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
¶m,&var,NULL,NULL); pSelection=var.pdispVal; param.rgvarg=A_Param;
param.cArgs=1;
param.cNamedArgs=0;
param.rgdispidNamedArgs=NULL;
param.rgvarg[0].vt=VT_BSTR;
param.rgvarg[0].bstrVal=SysAllocString(L"杨大毛:秦山第三核电厂,信息项目出:[email protected]");
//写入字符串;
hr=pSelection->lpVtbl->Invoke(pSelection,0x68,&IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,
¶m,NULL,NULL,NULL);
_gettchar();
}
{
if(a.Data1!=b.Data1)
return FALSE;
else if(a.Data2!=b.Data2)
return FALSE;
else if(a.Data3!=b.Data3)
return FALSE;
else if(a.Data4[0]!=b.Data4[0])
return FALSE;
else if(a.Data4[1]!=b.Data4[1])
return FALSE;
else if(a.Data4[2]!=b.Data4[2])
return FALSE;
else if(a.Data4[3]!=b.Data4[3])
return FALSE;
else if(a.Data4[4]!=b.Data4[4])
return FALSE;
else if(a.Data4[5]!=b.Data4[5])
return FALSE;
else if(a.Data4[6]!=b.Data4[6])
return FALSE;
else if(a.Data4[7]!=b.Data4[7])
return FALSE; return TRUE;}HRESULT STDMETHODCALLTYPE QueryInterface(IDispatch * This,REFIID riid,void **ppvObject)
{
if(Com_IID(*riid,IID_IUnknown))
{
*ppvObject=This;
return S_OK;
}
else if(Com_IID(*riid,IID_IDispatch))
{
*ppvObject=This;
return S_OK;
}
else if(Com_IID(*riid,IID_AppEvent))
{
*ppvObject=This;
return S_OK;
}
else
{
*ppvObject=NULL;
return E_NOINTERFACE;
}}ULONG STDMETHODCALLTYPE AddRef(IDispatch * This)
{
return 1;
}ULONG STDMETHODCALLTYPE Release (IDispatch * This)
{
return 0;
}HRESULT STDMETHODCALLTYPE GetTypeInfoCount(IDispatch * This,UINT *pctinfo)
{
return E_NOTIMPL;
}HRESULT STDMETHODCALLTYPE GetTypeInfo (IDispatch * This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo)
{
return E_NOTIMPL;
}HRESULT STDMETHODCALLTYPE GetIDsOfNames(IDispatch * This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId)
{
return E_NOTIMPL;
}HRESULT STDMETHODCALLTYPE Invoke(
IDispatch * This,
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS *pDispParams,
VARIANT *pVarResult,
EXCEPINFO *pExcepInfo,
UINT *puArgErr)
{
_tprintf(L"%X\n",dispIdMember);
return S_OK;
if(dispIdMember==2)
{
//word已经关闭,不能再进行操作
}}void initialize()
{
My_IDispatch.lpVtbl=&table;
My_IDispatch.lpVtbl->AddRef=AddRef;
My_IDispatch.lpVtbl->GetIDsOfNames=GetIDsOfNames;
My_IDispatch.lpVtbl->GetTypeInfo=GetTypeInfo;
My_IDispatch.lpVtbl->GetTypeInfoCount=GetTypeInfoCount;
My_IDispatch.lpVtbl->Invoke=Invoke;
My_IDispatch.lpVtbl->QueryInterface=QueryInterface;
My_IDispatch.lpVtbl->Release=Release;
}
视频教程地址http://v.youku.com/v_show/id_XNzU2NjYxNTk2.html
http://v.youku.com/v_show/id_XNzU2NjU3MTcy.html
http://v.youku.com/v_show/id_XNzU3MjU3Nzg4.html
不过用 C 来搞 COM , 感觉还真的很新鲜.