[color=]课程的大体目录:
[color=]3.Com开发之第一个ATL程序
[color=]4.Com开发之MFC调用Com接口
[color=]5.Com开发之MFC调用Com接口
[color=]6.Com开发之MFC调用Com接口
[color=]7.Com开发之MFC调用Com接口
[color=]8.Com开发之MFC调用Com接口
[color=]9.Com开发之ATL框架详解
[color=]10.Com开发之MFC实现自动化组件
[color=]11.Com开发之脚本调用Com的双接口
[color=]12.Com开发之MFC调用IDispatch
[color=]13.Com开发之MFC调用IDispatch
[color=]14.Com开发之MFC包装类的使用
[color=]15.Com开发之错误信息处理
[color=]16.Com开发之错误信息处理
[color=]17.Com开发之错误信息处理
[color=]18.Com开发之回调事件通知
[color=]19.Com开发之回调事件通知
[color=]20.Com开发之连接点
[color=]21.Com开发之连接点
[color=]24.VB测试ADO部件
[color=]25.VB测试ADO对象
[color=]26.VC使用ADO访问数据库
[color=]27.数据库建模工具的使用
[color=]28.ADO点Net测试SQL2005数据库设计
[color=]29.ADO点Net测试SQL2005数据库设计
[color=]30.ADO点Net测试SQL2005数据库设计
[color=]31.ADO点Net测试SQL2005数据库设计
[color=]32.C++点Net基础应用视频
[color=]33.C++点Net基础应用视频
[color=]34.第一个ATLCOM编程
[color=]35.第一个ATLCOM编程
[color=]36.第一个自定义ActiveX控件
[color=]37.第一个自定义ActiveX控件
[color=]项目源代码:
[color=]贴一下
[color=]// Err.cpp : Implementation of CErr
[color=]#include "stdafx.h"
[color=]#include "FirstATL.h"
[color=]#include "Err.h"
[color=]/////////////////////////////////////////////////////////////////////////////
[color=]// CErr
[color=]STDMETHODIMP CErr::InterfaceSupportsErrorInfo(REFIID riid)
[color=]{
[color=] static const IID* arr[] =
[color=] {
[color=] &IID_IErr
[color=] };
for (int i=0; i
[color=] {
if (InlineIsEqualGUID(*arr,riid))
[color=] return S_OK;
[color=] }
[color=] return S_FALSE;
[color=]}
[color=]// 最简单形式的错误表现方式
[color=]STDMETHODIMP CErr::Div1(long n1, long n2, long *pResult)
[color=]{
[color=] // TODO: Add your implementation code here
[color=] if (0==n2)
[color=] return E_INVALIDARG;
[color=] *pResult = n1 / n2;
[color=] return S_OK;
[color=]}
[color=]// 使用 IErrorInfo 接口方式的原理性代码
[color=]STDMETHODIMP CErr::Div2(long n1, long n2, long *pResult)
[color=]{
[color=] // TODO: Add your implementation code here
[color=] if (n2)
[color=] {
[color=] *pResult = n1 / n2;
[color=] return S_OK;
[color=] }
[color=] HRESULT hr;
CComQIPtr spCEI;
[color=] hr = ::CreateErrorInfo(&spCEI);
[color=] if (!spCEI)
[color=] return E_FAIL;
[color=] spCEI->SetGUID(IID_IErr); // 如果是系统定义的错误也可以使用 GUID_NULL
[color=] LPOLESTR pProgID = NULL;
[color=] hr = ::ProgIDFromCLSID(CLSID_Err,&pProgID);
[color=] if (SUCCEEDED(hr) && pProgID)
[color=] {
[color=] spCEI->SetSource(pProgID); // 设置错误源,也就是组件的 ProgID
[color=] ::CoTaskMemFree(pProgID);
[color=] }
[color=] // 上面是通用的方法,其实你当然知道正在书写的组件的 ProgID 了
[color=] // 所以不用动态取得 ProgID 也可. 你可以这样书写
[color=] // spCEI->SetSource( L"FirstATL.Err.1" ); ProgID 可以在 rgs 文件中看到
[color=] // 如果你的组件同时提供了帮助文件,那么就可以:
[color=] // spCEI->SetHelpContext( 0 ); // 设置帮助文件中的主题号
[color=] // spCEI->SetHelpFile( L"xxx.hlp" ); // 设置帮助文件的文件名
[color=] spCEI->SetDescription( L"除数不能为0" ); // 设置错误的文字描述
CComQIPtr spErrInfo = spCEI; // QueryInterface 得到 IErrorInfo
[color=] if( spErrInfo )
[color=] ::SetErrorInfo( 0, spErrInfo ); // 这时调用者就可以得到错误信息了
[color=] return E_FAIL;
[color=]}
[color=]// 使用 CComCoClass::Error() 方式,便捷地设置错误信息
[color=]STDMETHODIMP CErr::Div3(long n1, long n2, long *pResult)
[color=]{
[color=] // TODO: Add your implementation code here
[color=] if (0==n2)
[color=] return Error(L"除数不能为0");
[color=] *pResult = n1 / n2;
[color=] return S_OK;
[color=]}
解压密码:www.lthack.com
[color=]下载地址本帖隐藏的内容:
http://pan.baidu.com/share/link?shareid=1080938605&uk=3073355117
|