MFCActiveXocxWord文件下载.docx
《MFCActiveXocxWord文件下载.docx》由会员分享,可在线阅读,更多相关《MFCActiveXocxWord文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
时间戳服务非常重要,添加时间戳后,即使您的代码签名证书已经过期,但由于您的代码是在证书有效期内签名的,则时间戳服务保证了此代码仍然可信,最终用户仍然可以放心下载,使得即使代码签名证书已经过期,您也无需重签和重新发布已经签名的代码。
3.
选择“控件设置”选项卡,具体设置可参考上图。
其它选项卡为默认设置。
最后点击“完成”按钮保存设置。
二.
添加控件方法
VC2005会为我们自动创建好MFCActiveX程序框架,我们只要给该ActiveX控件添加方法即可。
现在我们给控件添加一个“AddFun”方法,这个方法是将两个数相加并返回结果。
点击“视图”,打开“类视图”窗口。
展开“ActiveXDemoLib”项,选中“_DActiveXDemo”项。
点击鼠标右键,选择“添加”下的“添加方法”。
打开添加方法向导窗口。
因为我们是添加一个加法方法,所以我们设置的返回类型为LONG型,方法名设为AddFun,添加两个LONG类型参数Add1,Add2。
4.
其它为默认设置,点击“完成”按钮完成添加方法。
接下来我们打开“解决方案资源管理器”打开“ActiveXDemoCtrl.cpp”文件。
5.
打开代码视图,我们会发现VC2005已经为我们添加了一个“AddFun”方法,我们在方法内添加“returnAdd1+Add2;
”语句。
三、MFCActivex安全问题:
1、在默认环境下,编译的MFCActivex控件,只能在本地代码中运行,即在http:
//localhost/xxx/xxx.htm中执行,而在http:
//127.0.0.1/xxx/xxx.htm中提示无相关属性,需要设置其初始化和脚本运行的安全性
ActiveX在远程IE页面上执行,需要实现安全接口。
在ATL写的ActiveX中,用IObjectSafety。
在MFC写的ActiveX中,直接修改注册表。
mfc实现的ocx,要在app实现文件中包括两个文件:
在ActivexDemo.cpp文件中实现以下方法
代码
#include
"
stdafx.h"
ActivexDemo.h"
<
comcat.h>
objsafe.h>
#ifdef
_DEBUG
#define
new
DEBUG_NEW
#endif
CActivexDemoApp
theApp;
const
GUID
CDECL
BASED_CODE
_tlid
=
{
0x344B8576,
0xAB2C,
0x4D38,
0xAE,
0x7,
0x73,
0x74,
0x22,
0x89,
0x72,
0xEA
}
};
WORD
_wVerMajor
=
1;
_wVerMinor
0;
//
CActivexDemoApp:
:
InitInstance
-
DLL
初始化
BOOL
InitInstance()
{
bInit
COleControlModule:
InitInstance();
if
(bInit)
TODO:
在此添加您自己的模块初始化代码。
}
return
bInit;
ExitInstance
终止
int
ExitInstance()
在此添加您自己的模块终止代码。
ExitInstance();
创建组件种类
HRESULT
CreateComponentCategory(CATID
catid,
WCHAR*
catDescription)
ICatRegister*
pcr
NULL
;
hr
S_OK
CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(void**)&
pcr);
(FAILED(hr))
hr;
Make
sure
the
HKCR\Component
Categories\{..catid...}
key
is
registered.
CATEGORYINFO
catinfo;
catinfo.catid
catid;
catinfo.lcid
0x0409
english
provided
description
not
too
long.
Only
copy
first
127
characters
it
is.
len
wcslen(catDescription);
(len>
127)
127;
wcsncpy(catinfo.szDescription,
catDescription,
len);
null
terminated.
catinfo.szDescription[len]
'
\0'
pcr->
RegisterCategories(1,
&
catinfo);
Release();
注册组件种类
RegisterCLSIDInCategory(REFCLSID
clsid,
CATID
catid)
Register
your
component
categories
information.
(SUCCEEDED(hr))
this
category
as
being
implemented"
by
class.
rgcatid[1];
rgcatid[0]
RegisterClassImplCategories(clsid,
1,
rgcatid);
(pcr
!
NULL)
卸载组件种类
UnRegisterCLSIDInCategory(REFCLSID
Unregister
rgcatid[1]
UnRegisterClassImplCategories(clsid,
STDAPI
DllRegisterServer(void)
AFX_MANAGE_STATE(_afxModuleAddrThis);
(!
AfxOleRegisterTypeLib(AfxGetInstanceHandle(),
_tlid))
ResultFromScode(SELFREG_E_TYPELIB);
COleObjectFactoryEx:
UpdateRegistryAll(TRUE))
ResultFromScode(SE