文档详情

ActiveX控件完全教程.doc

发布:2017-08-08约5.33千字共6页下载文档
文本预览下载声明
参考网站:/bkhtml/2008-07/57652.htm 用VC++开发ActiveX 控件完全教程(二)假设需求如下:底层是一个数学运算库DLL,中间是ActiveX控件(它调用底层的数学运算库DLL来完成控制层),界面层在测试时可以是一个exe程序,最后发布到IE浏览器上测试。 ?? ?? ?? ??数学运算库DLL的开发 ?? ?? 新建一个Win32 DLL项目,加入一个头文件MyNum.h,在其中声明所有的数学函数(为简单起见,本文只考虑加法运算),代码如下: ?? ??#ifndef MY_NUM_H ??#define MY_NUM_H ??int __stdcall AddNum(int,int); ??#endif ?? ??请注意这里的方法声明为__stdcall,而VC++默认的是__cdecl,由于组件的语言无关性要求调用和被调双方必须在函数调用的约定上一致,因此在后面加载DLL并获取此方法时也要求和你的声明一致。 ?? ?? 为了简单起见,加法方法的实现就放倒DLL入口点所在文件,代码如下: ?? ??// NumDLL.cpp : 定义DLL 应用程序的入口点。 ??// ??#include stdafx.h ??#include MyNum.h ?? ??#ifdef _MANAGED ??#pragma managed(push, off) ??#endif ?? ??int __stdcall AddNum(int Num1,int Num2) ??{ ?? return Num1+Num2; ??} ??BOOL APIENTRY DllMain( HMODULE hModule, ?? Dword ul_reason_for_call, ?? LPVOID lpReserved ?? ) ??{ ?? return TRUE; ??} ?? ??#ifdef _MANAGED ??#pragma managed(pop) ??#endif ?? ?? 为了能在其他程序中显示链接此DLL,我们为它加入一个.def文件,命名为NumDLL.def,列出此DLL导出的方法名称: ?? ??LIBRARY NumDLL ??EXPORTS ?? AddNum ?? ??至此我们的数学运算函数库DLL就完成了。 ?? ??用ATL开发ActiveX控件 ?? ?? 开发ActiveX控件有两种方式,一是MFC,二是ATL,而后者是专门用于COM组件开发,因此更适合于ActiveX。因此这里选择后者,前者的开发示例参考我这篇文章(用VC++开发ActiveX 控件完全教程(一))。 ?? ?? 新建一个ATL项目,命名为”FuckATL”,接受默认设置。右键项目名,添加一个”ATL简单对象“,命名为CaluNumCtrl,点击下一步进入组件选项设置界面。 ?? ?? 修改类的头文件CaluNumCtrl.h如下: ?? ??class ATL_NO_VTABLE CCaluNumCtrl : ?? public CComObjectRootExCComSingleThreadModel, ?? public CComCoClassCCaluNumCtrl, CLSID_CaluNumCtrl, ?? public ISupportErrorInfo, ?? public IConnectionPointContainerImplCCaluNumCtrl, ?? public CProxy_ICaluNumCtrlEventsCCaluNumCtrl, ?? public IObjectWithSiteImplCCaluNumCtrl, ?? public IDispatchImplICaluNumCtrl, IID_ICaluNumCtrl, LIBID_FuckATLLib, /**//*wMajor =*/ 1, /**//*wMinor =*/ 0 ??{ ??public: ?? typedef int (__stdcall*PtrAddNum)(int,int); ?? PtrAddNum MyAddNum; ?? CCaluNumCtrl() ?? { ?? //加载数学运算库DLL ?? handle = ::LoadLibrary(_T(D:\\dyk\\work\\NumDLL\\debug\\NumDLL.dll)); ?? if (handle == NULL) ?? { ?? DWORD e = GetLastError(
显示全部
相似文档