VC++ 6.0实现自动化对象
来源:互联网 发布:锐捷网络怎么样 编辑:程序博客网 时间:2024/05/10 14:32
一.建立自动化对象--源程序:
1.打开vc,建立一个工程,选择MFC AppWizard(exe),在project name里输入:AutoAppTest
2.下一步,选Dialog based单选框
3.下一步,选Automation复选框
4.点击完成
5.在整个工程中,有三个类和一个接口说明,类分别为:CAutoAppTestApp、CAutoAppTestDlg、CAutoAppTestDlgAutoProxy,接口为:IAutoAppTest。
其中CAutoAppTestDlgAutoProxy类,为自动化对象的代理,我们主要是在这里面做文章。在这个类中,我们要注意AutoAppTest.Application字符串,这是这个自动化Com对象的ID
,我们在客户程序中要用到她。
6.添加方法和属性。这里我只添加一个方法void ShowMsg(LPCTSTR lpShow),打开ClassWizard,在Automation选项卡里,在Class Name的下拉菜单中选择
CAutoAppTestDlgAutoProxy类,点击Add Method...按钮,在External Name 输入ShowMsg,return type选择void类型,Parameter list中的name字段输入lpShow,选择的Type为
LPCTSTR。点击Ok按钮,至此,我们向接口IAutoAppTest添加了我们自己的方法,可以浏览IAutoAppTest口描述文件。
7.点击Edit Code按钮为这个方法写代码。代码如下:
void CAutoAppTestDlgAutoProxy::MsgBox(LPCTSTR lpMsgText)
{
// TODO: Add your dispatch handler code here
m_pDialog->SetDlgItemText(IDC_EDIT1,lpMsgText);//IDC_EDIT1为CAutoAppTestDlg窗体类中的Edit控件ID
// AfxMessageBox(lpMsgText);
}
编译,至此一个AutoAppTest.exe形式的自动化对象生成。在生成的应用程序的目录下,我们注意AutoAppTest.tlb文件,这个文件在客户端程序上要用到。
二.建立客户端程序调用自动化对象
1.打开vc,安普通的步骤建立一个exe工程文件。
2.引用Com对象。打开ClassWizard对话框,点击Add Class...按钮,选择From a Tpye library...,选择上面编译程序后生成的AutoAppTest.tlb文件,点击ok,在工程中会生成一
个IAutoAppTest的类。我们只需在整个的工程应用中应用这个类里的方法,就能调用AutoAppTest.exe自动化对象的方法。
3.代码实现:
a.声明变量:IAutoAppTest m_Auto;
b.在应用程序的启动处(CRunTestApp::InitInstance)添加应用程序支持COM的初始化工作
if (!AfxOleInit())
{
AfxMessageBox("AfxOleInit error");
return FALSE;
}
c. CRunTestDlg::OnInitDialog()在此处代码加入如下代码:
COleException e;
CLSID clsid;
if (CLSIDFromProgID(OLESTR("AutoAppTest.Application"), &clsid) != NOERROR)
{
return FALSE;
}
// try to get the active calculator before creating a new one
LPUNKNOWN lpUnk = NULL;
LPDISPATCH lpDispatch = NULL;
HRESULT hr;
hr = ::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(LPVOID*)&lpUnk);
if (SUCCEEDED(hr))
{
HRESULT hr = lpUnk->QueryInterface(IID_IDispatch,
(LPVOID*)&lpDispatch);
lpUnk->Release();
if (hr == NOERROR)
m_Auto.AttachDispatch(lpDispatch, TRUE);
}
// if not dispatch ptr attached yet, need to create one
if (m_Auto.m_lpDispatch == NULL &&
!m_Auto.CreateDispatch(clsid, &e))
{
AfxMessageBox("Error");
return FALSE;
}
d.void CRunTestDlg::OnOK()
{
// TODO: Add extra validation here
TCHAR tcBuffer[1024] = {0};
GetDlgItemText(IDC_EDIT1,tcBuffer,1024);
m_Auto.MsgBox(tcBuffer);
//CDialog::OnOK();
}
1.打开vc,建立一个工程,选择MFC AppWizard(exe),在project name里输入:AutoAppTest
2.下一步,选Dialog based单选框
3.下一步,选Automation复选框
4.点击完成
5.在整个工程中,有三个类和一个接口说明,类分别为:CAutoAppTestApp、CAutoAppTestDlg、CAutoAppTestDlgAutoProxy,接口为:IAutoAppTest。
其中CAutoAppTestDlgAutoProxy类,为自动化对象的代理,我们主要是在这里面做文章。在这个类中,我们要注意AutoAppTest.Application字符串,这是这个自动化Com对象的ID
,我们在客户程序中要用到她。
6.添加方法和属性。这里我只添加一个方法void ShowMsg(LPCTSTR lpShow),打开ClassWizard,在Automation选项卡里,在Class Name的下拉菜单中选择
CAutoAppTestDlgAutoProxy类,点击Add Method...按钮,在External Name 输入ShowMsg,return type选择void类型,Parameter list中的name字段输入lpShow,选择的Type为
LPCTSTR。点击Ok按钮,至此,我们向接口IAutoAppTest添加了我们自己的方法,可以浏览IAutoAppTest口描述文件。
7.点击Edit Code按钮为这个方法写代码。代码如下:
void CAutoAppTestDlgAutoProxy::MsgBox(LPCTSTR lpMsgText)
{
// TODO: Add your dispatch handler code here
m_pDialog->SetDlgItemText(IDC_EDIT1,lpMsgText);//IDC_EDIT1为CAutoAppTestDlg窗体类中的Edit控件ID
// AfxMessageBox(lpMsgText);
}
编译,至此一个AutoAppTest.exe形式的自动化对象生成。在生成的应用程序的目录下,我们注意AutoAppTest.tlb文件,这个文件在客户端程序上要用到。
二.建立客户端程序调用自动化对象
1.打开vc,安普通的步骤建立一个exe工程文件。
2.引用Com对象。打开ClassWizard对话框,点击Add Class...按钮,选择From a Tpye library...,选择上面编译程序后生成的AutoAppTest.tlb文件,点击ok,在工程中会生成一
个IAutoAppTest的类。我们只需在整个的工程应用中应用这个类里的方法,就能调用AutoAppTest.exe自动化对象的方法。
3.代码实现:
a.声明变量:IAutoAppTest m_Auto;
b.在应用程序的启动处(CRunTestApp::InitInstance)添加应用程序支持COM的初始化工作
if (!AfxOleInit())
{
AfxMessageBox("AfxOleInit error");
return FALSE;
}
c. CRunTestDlg::OnInitDialog()在此处代码加入如下代码:
COleException e;
CLSID clsid;
if (CLSIDFromProgID(OLESTR("AutoAppTest.Application"), &clsid) != NOERROR)
{
return FALSE;
}
// try to get the active calculator before creating a new one
LPUNKNOWN lpUnk = NULL;
LPDISPATCH lpDispatch = NULL;
HRESULT hr;
hr = ::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(LPVOID*)&lpUnk);
if (SUCCEEDED(hr))
{
HRESULT hr = lpUnk->QueryInterface(IID_IDispatch,
(LPVOID*)&lpDispatch);
lpUnk->Release();
if (hr == NOERROR)
m_Auto.AttachDispatch(lpDispatch, TRUE);
}
// if not dispatch ptr attached yet, need to create one
if (m_Auto.m_lpDispatch == NULL &&
!m_Auto.CreateDispatch(clsid, &e))
{
AfxMessageBox("Error");
return FALSE;
}
d.void CRunTestDlg::OnOK()
{
// TODO: Add extra validation here
TCHAR tcBuffer[1024] = {0};
GetDlgItemText(IDC_EDIT1,tcBuffer,1024);
m_Auto.MsgBox(tcBuffer);
//CDialog::OnOK();
}
- VC++ 6.0实现自动化对象
- VC++ 6.0实现自动化对象
- VC.NET实现自动化组件
- 使用 Excel 对象模型实现 Excel 自动化
- vc 自动化安装IIS
- //--《面向对象程序设计与VC++实现》作业
- VC++ Word文档 自动化技术
- VC之Office自动化开发
- VC Office 自动化(Word、Excel)
- 自动化编译打包VC工程
- VC++之Office自动化开发
- VC++制作Photoshop自动化插件
- VC++之Office自动化开发
- VC之office自动化开发
- 用Visual Basic 6.0实现自动化测试
- 用Visual Basic 6.0实现自动化测试
- 《面向对象程序设计与VC++实现》--liwei_1_4(成绩判断)
- 《面向对象程序设计与VC++实现》--第一章 疑难点汇集
- ubuntu对硬盘的“Load/Unload Cycle威胁”分析及官方解决办法
- GOOGLE服务(不断更新中)
- 用 LaTeX 写漂亮学位论文
- 广东化州“原野乐队”几首不错的原创歌曲(可下载)
- ADO.NET实用经验与大家分享
- VC++ 6.0实现自动化对象
- 解开 Windows 下的临界区中的代码死锁(转)
- 计划失败的08年第一周...
- 一个检查文本编码类型的Python库
- 我所了解的老鹰乐队
- C#解号称爱因斯坦出的智力题
- 有意义的开始
- windows重装后linux引导程序修复
- C#分析数据库结构,使用XSL模板自动生成代码