qq_26392655 2015-04-24 05:14 采纳率: 0%
浏览 1951

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);

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-04-24 05:23
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?