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