activex-Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突!

问题描述

Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突!

我的参考文章http://blog.csdn.net/u010258235/article/details/16823543,自己按照这个步骤试了一下,但是打开html网页时提示如下:

Internet Explorer 已经为了帮助保护您的计算机而关闭此网页

运行不正常的加载项或恶意加载项导致 Internet Explorer 关闭此网页。
您可以执行以下操作:
转到主页

 尝试返回查看的页面 

 更多信息

我在工具-〉Internet选项-〉安全中将安全级别中所有ActiveX相关的选项都启用了以后,IE仍然提示“当前安全设置会使计算机有风险”,继续运行后还是提示修复设置,网页上仍然显示上面的“关闭网页”,上面的示例还有网上其他文章里不是说用IObjectSafety就可以了吗?可我将IE安全级别设到最低还是无法打开网页!换成IE7后没有安全问题了,可以运行,但是提示内存访问冲突,断点在调用外部DLL时:
我的源代码如下:
// DTUTest.h : CDTUTest 的声明

#pragma once
#include "resource.h" // 主符号
#include "windows.h"

#include "AOETest_i.h"
#include "_IDTUTestEvents_CP.h"

#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"
#endif

// CDTUTest

class ATL_NO_VTABLE CDTUTest :
public IObjectSafetyImpl, // 安全提示解除,--当运行浏览器调用时,不会提示安全问题。
public CComObjectRootEx,
public CComCoClass,
public IConnectionPointContainerImpl,
public CProxy_IDTUTestEvents,
public IObjectWithSiteImpl,
public IDispatchImpl
{
public:

typedef BOOL (*DTUStartServiceFunc)(USHORT); // 定义一个指向DSStartService函数地址的指针类型。
HMODULE hDllModule; // 指向动态库的句柄
DTUStartServiceFunc _DTUStartServiceFunc;
CDTUTest()
{
hDllModule = LoadLibrary((LPCWSTR) "DTUdll.dll"); // 装载动态库
if(hDllModule != NULL) // 成功调用动态库
_DTUStartServiceFunc = (DTUStartServiceFunc)GetProcAddress(hDllModule,"DSStartService"); // 从动态库中取得DSStartService函数的地址
else
FreeLibrary(hDllModule); // 未成功调用动态库,释放资源
}

DECLARE_REGISTRY_RESOURCEID(IDR_DTUTEST)

BEGIN_COM_MAP(CDTUTest)
COM_INTERFACE_ENTRY(IDTUTest)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IObjectWithSite)
COM_INTERFACE_ENTRY(IObjectSafety) // 安全提示解除,--当运行浏览器调用时,不会提示安全问题。
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CDTUTest)
CONNECTION_POINT_ENTRY(__uuidof(_IDTUTestEvents))
END_CONNECTION_POINT_MAP()

// STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}

public:

STDMETHOD(DTUStart)(USHORT DTUListenPort);
};

OBJECT_ENTRY_AUTO(__uuidof(DTUTest), CDTUTest)


// DTUTest.cpp : CDTUTest 的实现

#include "stdafx.h"
#include "DTUTest.h"

// CDTUTest

STDMETHODIMP CDTUTest::DTUStart(USHORT DTUListenPort)
{
// TODO: 在此添加实现代码
if(_DTUStartServiceFunc != NULL) // 是否成功取得函数地址
{
BOOL StartRes = this->_DTUStartServiceFunc(DTUListenPort); // 错误在这一行,IE提示内存访问冲突
}
else
{

}
this->_AtlFinalRelease();

return S_OK;
}

调用的DLL中DSStartService函数的声明:
BOOL DSStartService(u16t uiListenPort);

解决方案

首先要正确注册ActiveX. 其次要有合法签名,否则浏览器会不认可。然后就是你的控件本身运行起来后的指针,函数估计有问题。

时间: 2024-09-02 23:37:04

activex-Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突!的相关文章

atl ocx 控件 事件回调给JS 调用 Invoke 接口失败

问题描述 atl ocx 控件 事件回调给JS 调用 Invoke 接口失败 做了个测试,js里设置回调: function startMonitor(){ OCXAPI.SetJSCallBack(showMonitor); } 将js的函数 showMonitor 设置到 ocx中,采用此方法保存:CComPtr m_pCallBack; 当有事件触发时,调用 m_pAccCallBack->Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_

activex-linux环境 java 开发类似Activex功能的插件或控件

问题描述 linux环境 java 开发类似Activex功能的插件或控件 linux环境 java 开发类似Activex功能的插件或控件,能够访问本地的程序

activex控件练习,实现在网页上读取一个文档中的内容但是无法实现

问题描述 activex控件练习,实现在网页上读取一个文档中的内容但是无法实现 char CTest_01Ctrl::Readfile(char* pathname) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: Add your dispatch handler code herechar a[100]; char a[100]; char str; //char s[80]; int i=0; ifstream infile;

c++编写的项目调用MFC的控件

问题描述 c++编写的项目调用MFC的控件 之前同事用纯C++写了个项目,现在说要加个MFC的控件(加个webbrowser控件),但是我刚接触C++.请问下这个可不可行,有没有相关的示例学习学习 解决方案 你说的c++是什么?什么编译器,用的什么类库.另外webbrowser不是mfc的控件,而是封装在一个activex库(shdocvw.dll)中的. 解决方案二: 如果要深入了解MFC的话,建议看看<深入浅出MFC>,不然你用MFC都是一知半解暗箱操作 解决方案三: 没问题呀,但是在Wi

在WPF工程中如何调用Windows窗体控件项目中控件属性、方法以及事件????

问题描述 运行环境:VS2008使用的工程:WPF应用程序以及Windows窗体控件库使用过程:新建一个Windows窗体控件库项目,这里名字叫MyControl新建一个Form窗体用来承载用户控件,这个Form窗体叫UerControl1,对应的文件名字为:UerControl1.vb在项目中添加对用户控件的必要的引用在项目中添加一个我下载的用户控件,这里名字叫A新建一个WPF工程,这里名字叫WPFProjWindow1.xaml文件的代码如下:<Windowx:Class="Windo

xerces 开源库-vc6 封装的atl ocx 控件 可以封装 底层开源库吗?

问题描述 vc6 封装的atl ocx 控件 可以封装 底层开源库吗? 我封装了一个ocx插件,并形成了cab格式,然后进行了数字签名,js调用ok: 由于需要ocx解析xml格式的字符串,在ocx中调用了 xerces-c_2_7.dll 这个库文件,然后通过js调用的时候,ie就卡在了解析xml的接口里了: xerces-c_2_7.dll 这个库一起一直在服务器里进行正常调用,是完全正常的,我在inf文件里已经加入了 xerces-c_2_7.dll 的信息,如下:[Version] si

Mvc3框架调用服务端控件解决方案

原文:http://www.cnblogs.com/rushoooooo/archive/2011/04/30/2033570.html /*BY:rush date:2011年4月30日 20:17:38*/ /*说明:.net mvc3框架,View层调用服务端控件,输出到.cshtml文件中显示*/ 1.先说说.net mvc2以前版本以及普通.net网页窗口的使用方式,即没有使用Razor模板以前使用服务端控件的方法.(这里以TreeView控件为例) 新建一个.aspx文件,点击设计视

WEB嵌入.net打印控件

WEB嵌入.net打印控件 2005-11-05 20:46:19 一笑^_^@-MZ7x /article/-MZ7x-fOhKji.html 复制 评论 基于XML的WEB系统报表精确打印实现 王春红 何志林 (运城学院计算机科学与技术系,山西 运城 044000)   摘 要:XML及其相关技术日益渗透到计算机科学的各个层面.针对XML的特点,给出了一个利用XML有效解决B/S结构中客户端快速精确打印报表方法,并以所开发的运城市城建局建设工程交易中心招投标管理系统作为实例说明了这一方案在M

mscomm32 ocx-windows7下调用MSCOMM32.OCX控件失败

问题描述 windows7下调用MSCOMM32.OCX控件失败 目的: 在JSP页面中调用MSCOMM32.OCX控件处理串口打印,打印机用的是EPSON TM-T81小票打印机,在XP中通过IE访问调试通过,可以正常打印,在win7下打印失败,现希望在win7下可以正常打印 已处理的问题 MSCOMM32.OCX已拷贝至C:WindowsSysWOW64下 已在C:WindowsSysWOW64下执行 regsvr32 MSCOMM32.OCX注册成功 已在注册表注入如下内容 [-HKEY_