VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1273|回复: 13

[求助] JS调用在64位下的支持问题

[复制链接]
15_avatar_middle
在线会员 发表于 2015-10-20 09:42:42 | 显示全部楼层 |阅读模式
3驿站币
我参考https://www.cctry.com/thread-1180-1-1.html文章中提供的封装的JS库,测试一个JS文件。编译为32位程序执行没问题,但是编译为64位程序并在64位操纵系统下跑,就出问题。经过调试发现出错点是在HRESULT hr = m_pScript.CreateInstance(__uuidof(ScriptControl));
请问CreateInstance时,在64位下会出问题么?应该改为什么呢?

最佳答案

查看完整内容

刚刚确认了下,貌似不支持了,我的系统也是 Win7-x64 位的, 在:C:\Windows\SysWOW64 目录下,有 msscript.ocx,说明 32 位的程序是可以用的 但是在:C:\Windows\System32 目录下,找不到 msscript.ocx 组件,所以不支持 64位的程序了




上一篇:标题文字能居中吗
下一篇:GetDlgItem为什么能封装句柄并返回指针?
51_avatar_middle
online_admins 发表于 2015-10-20 09:42:43 | 显示全部楼层
sweet 发表于 2015-10-20 14:28
我的系统是WIN7x64位。我用VS2010,分别编译了32位和64位的这个执行JS的DEMO。32位的程序,跑起来一切正 ...

刚刚确认了下,貌似不支持了,我的系统也是 Win7-x64 位的,
在:C:\Windows\SysWOW64 目录下,有 msscript.ocx,说明 32 位的程序是可以用的
但是在:C:\Windows\System32 目录下,找不到 msscript.ocx 组件,所以不支持 64位的程序了
51_avatar_middle
online_admins 发表于 2015-10-20 09:56:32 | 显示全部楼层
可能是实例化COM组件出错了,用 try-catch 捕获下异常,看看是什么错误信息?

点评

不好意思,我描述可能不准确。执行到这行代码时,不是出错,而是失败。然后因为它失败,后面执行JS代码时就崩溃出错了。失败返回值是REGDB_E_CLASSNOTREG  发表于 2015-10-20 10:27
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 10:14:39 | 显示全部楼层
本帖最后由 sweet 于 2015-10-20 10:20 编辑

我试过,不是我代码的问题,我用给的例子代码,用VS2010编译为64位程序,一跑起来就在那个位置出错。我捕捉了下异常,但没看明白异常代码。
其实应该准确的说是初始化失败,没有异常。异常是因为它失败了,所以我后面的JS执行就出现异常了。
我看了返回的结果,按照MSDN提示,应该是因为
REGDB_E_CLASSNOTREG
指定的类没有在注册表中注册. 也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏

15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 10:47:15 | 显示全部楼层
回复SYC:
还有就是,我也尝试过用您开源的JsMgr。但是本人水平有限,用2010编译时,总是出错
提示
1>JsManager.obj : error LNK2001: unresolved external symbol JS_CallFunctionName
1>JsManager.obj : error LNK2001: unresolved external symbol JS_EncodeString
1>JsManager.obj : error LNK2001: unresolved external symbol JS_free
1>JsManager.obj : error LNK2001: unresolved external symbol JS_NewStringCopyZ
一直不知道如何解决
51_avatar_middle
online_admins 发表于 2015-10-20 11:10:56 | 显示全部楼层
sweet 发表于 2015-10-20 10:14
我试过,不是我代码的问题,我用给的例子代码,用VS2010编译为64位程序,一跑起来就在那个位置出错。我捕捉 ...

楼主是什么系统,WinXP 吗?XP下没有64位的 msscript.ocx 组件
24_avatar_middle
online_vip 发表于 2015-10-20 13:10:11 | 显示全部楼层
JS调用在64位下的支持问题 生成的EXE,必须要32位。
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 14:28:14 | 显示全部楼层
Syc 发表于 2015-10-20 11:10
楼主是什么系统,WinXP 吗?XP下没有64位的 msscript.ocx 组件

我的系统是WIN7x64位。我用VS2010,分别编译了32位和64位的这个执行JS的DEMO。32位的程序,跑起来一切正常。可是64位的就不行。经过DEBUG发现,HRESULT hr = m_pScript.CreateInstance(__uuidof(ScriptControl));这一句返回失败,失败的原因是REGDB_E_CLASSNOTREG。由于它的失败,导致后面执行JS的时候出错崩溃
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 14:29:43 | 显示全部楼层
bacsj118 发表于 2015-10-20 13:10
生成的EXE,必须要32位。

我现在要解决的是64位的问题。因为我的程序是64位编译的,需要这个解析JS的类也能支持64位。
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 14:48:59 | 显示全部楼层
Syc 发表于 2015-10-20 14:35
刚刚确认了下,貌似不支持了,我的系统也是 Win7-x64 位的,
在:C:\Windows\SysWOW64 目录下,有 msscr ...

难怪,看来只有想法用别的类库了。感谢SYC的耐心指导
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 14:50:17 | 显示全部楼层
Syc 发表于 2015-10-20 14:35
刚刚确认了下,貌似不支持了,我的系统也是 Win7-x64 位的,
在:C:\Windows\SysWOW64 目录下,有 msscr ...

不知道您发布的JsMgr是否支持64位?我由于水平有限,一直没有编译通过。连您发布的例子代码,我直接编译,都编译不通过,提示
1>JsManager.obj : error LNK2001: unresolved external symbol JS_CallFunctionName
1>JsManager.obj : error LNK2001: unresolved external symbol JS_EncodeString
1>JsManager.obj : error LNK2001: unresolved external symbol JS_free
1>JsManager.obj : error LNK2001: unresolved external symbol JS_NewStringCopyZ
我明明是有把他们加进来的,真奇怪
51_avatar_middle
online_admins 发表于 2015-10-20 14:55:09 | 显示全部楼层
sweet 发表于 2015-10-20 14:50
不知道您发布的JsMgr是否支持64位?我由于水平有限,一直没有编译通过。连您发布的例子代码,我直接编译 ...

我给大家封装的 JsMgr 内部使用的是 FireFox 的 JavaScript 引擎 SpiderMonkey,不过我是用 32 位来编译的,所以楼主要是想用在 64 位平台的话,需要自己编译 SpiderMonkey 了,他是支持 64 位的,具体编译过程见:https://developer.mozilla.org/en ... Build_Documentation
15_avatar_middle
ico_lz  楼主| 发表于 2015-10-20 14:57:02 | 显示全部楼层
Syc 发表于 2015-10-20 14:55
我给大家封装的 JsMgr 内部使用的是 FireFox 的 JavaScript 引擎 SpiderMonkey,不过我是用 32 位来编译 ...

GOD,看了下,完全看不懂。哎,看来我只有另外自己想办法了。谢谢您的帮助
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-23 03:54

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表