ActiveX控件完全教程.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ActiveX控件完全教程

参考网站:/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(

您可能关注的文档

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档