关于VS2010开发的OCX控件,供WEB加载的问题

dahua010 2014-10-14 03:28:10
用vs2010的工程MFC ActiveX开发了一个OCX控件,用于给WEB加载,来判断本地程序是安装
控件仅仅实现了一个GetVersion函数

dispinterface _DWebAPP
/////////.xxxxxx.dil
{
properties:
methods:
[id(1)] LONG GetVersion(void);
};
///////////////xxx.cpp
// 调度映射

BEGIN_DISPATCH_MAP(CWebAPPCtrl, COleControl)
DISP_FUNCTION_ID(CWebAPPCtrl, "GetVersion", dispidGetVersion, GetVersion, VT_I4, VTS_NONE)
END_DISPATCH_MAP()

LONG CWebAPPCtrl::GetVersion(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加调度处理程序代码

return 1001;
}

//////////////////xxxx.h
// 调度和事件 ID
public:
enum {
};
protected:
LONG GetVersion(void);

enum
{
dispidGetVersion = 1L
};



之后自己写了一段HTML测试

<HTML>
<input id="input1" value="CallActiveX" type="button" onclick="CallOcx()">
<br>

<OBJECT id="IXinApp"
classid="clsid:0C2D24CC-C60E-4D70-8750-266063E2C324"
width="0" height="0"
codebase="" />
</HTML>

<script language="JavaScript" type="text/JavaScript">
function CallOcx()
{
//--初始化、装载样式文件
alert(IXinApp.GetVersion());
}
</script>
测试结果为

win732位系统下,完全没问题
但是换成WIN764位以后,问题来了。
注册ocx的时候
甭管我使用和32位一样的,直接用regsvr32注册。
还是用网上搜到的,放到sysWOW64文件夹下面,在注册。
都会提示我,注册成功。
但是当我加载页面的时候,不会给我弹出alert。控件应该是加载失败了。

求助各位大侠啊!我该如何更改,头疼了一下午了。。。

补充下。我在WIN764位下查了下注册表。已经存在了
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{0C2D24CC-C60E-4D70-8750-266063E2C324}]
.....
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{0C2D24CC-C60E-4D70-8750-266063E2C324}\Version]
@="1.0"
数据都是对的。
...全文
517 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahua010 2014-10-15
  • 打赏
  • 举报
回复
问题找到了。我在创建工程的时候勾选了,添加运行时许可证。 勾选了这个选项以后,我的UUID后面就多了 licence 这个关键字 后来我参考了别人写过的。发现都没有这个关键字,我就新建了一个工程,没有勾选这个选项,结果64位下就认识了。 至于原因是什么,还有待baidu....
dahua010 2014-10-14
  • 打赏
  • 举报
回复
本意就是想让主页上多个按钮,点击判断,本地程序有没有安装。 本地安装会注册OCX控件,没有就提示下载。 实现这个功能,写了个测试先看看。 结果被64位难住了。。
dahua010 2014-10-14
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
你使用 32 为测试看看。在 Program Files(x86) 下的。 不过 Windows 8.1 以后,IE 缺省就是加载 32 为的插件的。 Chrome 是不支持 ActiveX 的。 它自己的插件,NPAPI,好像最近有改了。 好久没看 Chrome 了。
恩,我知道chrome是不行的。所以在ie下测试的。 我看了下我用语测试的IE,在任务浏览器后面写了个 iexplore * 32 应该对吧。。。
Saleayas 2014-10-14
  • 打赏
  • 举报
回复
你使用 32 为测试看看。在 Program Files(x86) 下的。 不过 Windows 8.1 以后,IE 缺省就是加载 32 为的插件的。 Chrome 是不支持 ActiveX 的。 它自己的插件,NPAPI,好像最近有改了。 好久没看 Chrome 了。
dahua010 2014-10-14
  • 打赏
  • 举报
回复
引用 5 楼 Saleayas 的回复:
你确定的你的 64 位系统下的 Web 容器,加载的是 32 位的控件。 比如 IE 在 64 位系统下,有两个版本的。
加载方法就是按照 我上面写的html做的。 我不太熟悉web开发。 例子是我抄来的测试方法。 您看看我写的对么 机器默认的是google浏览器。我是在运行里打开IE,然后将我写的例子的那个.html文件拖拽到IE上。之后查看结果的。
Saleayas 2014-10-14
  • 打赏
  • 举报
回复
你确定的你的 64 位系统下的 Web 容器,加载的是 32 位的控件。 比如 IE 在 64 位系统下,有两个版本的。
dahua010 2014-10-14
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
在 64 为版本下, 64 位程序需要放在 System32 下,而 32 为 程序需要放在 SysWow64 下。 因为在 32 为程序中, System32 被重定向到 SysWow64。
我这样试过了,在64位系统中,将我的32位ocx控件copy到SysWOW64文件夹下面。 然后cmd,到SysWOW64这个路径下,运行regsvr32 SysWOW64路径下的ocx文件 注册。 结果还是不能加载, 请问是这样操作么?
Saleayas 2014-10-14
  • 打赏
  • 举报
回复
在 64 为版本下, 64 位程序需要放在 System32 下,而 32 为 程序需要放在 SysWow64 下。 因为在 32 为程序中, System32 被重定向到 SysWow64。
dahua010 2014-10-14
  • 打赏
  • 举报
回复
引用 1 楼 zjlei712 的回复:
在x64的系统下,你将ocx控件编译成64位的,重新注册试试
试验过64位的。也是不行。。 还是注册没问题 web加载失败了
弄啥 2014-10-14
  • 打赏
  • 举报
回复
在x64的系统下,你将ocx控件编译成64位的,重新注册试试

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧