64位matlab调用 com组建,64位系统VBS调用32位COM组件
今天有人问我,为什么他的VBS脚本在64位Windows 7中用VbsEdit可以直接执行,但是直接双击就会出错:ActiveX 部件不能创建对象: ‘MSWinsock.Winsock’。
在64位系统中存在两组不同的wscript.exe和cscript.exe,一组是64位的,在C:\Windows\System32文件夹;一组是32位的,在C:\Windows\SysWOW64文件夹。由于64位和32位的内存模式不同,64位进程无法加载32位DLL,故以DLL封装COM组件无法在64位进程调用。
具体到上面的问题,MSWinsock.Winsock是32位COM组件,而直接双击运行VBS文件默认是以C:\Windows\System32\wscript.exe为宿主的,也就是64位的进程,64位进程无法加载32位的DLL,所以会出现“ActiveX 部件不能创建对象”的错误。如果想不报错的话需要手动指定用32位的宿主来执行。
那为什么用VbsEdit可以直接执行呢?因为早期版本的VbsEdit在64位系统上会自动调用32位的wscript.exe或者cscript.exe来执行脚本。对于比较新的VbsEdit,已经区分为32位的VbsEdit何64位的VbsEdit,不同版本的VbsEdit会调用对应版本的wscript.exe或者cscript.exe来执行。
怎样才能在64位系统里直接双击运行包含32位COM组件调用的VBS脚本呢?一种方法是改注册表,但是这个方法不通用;另一种方法是在VBS代码中做检测:
Option Explicit
Run32()
DimWinsock
SetWinsock = CreateObject("MSWinsock.Winsock")
MsgBox"成功创建MSWinsock.Winsock对象"
SubRun32()
'Author: Demon
'Date: 2015/7/9
'Website: http://demon.tw
DimstrComputer, objWMIService, colItems, objItem, strSystemType
strComputer ="."
SetobjWMIService = GetObject("winmgmts:\\"& strComputer &"\root\cimv2")
SetcolItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For EachobjItemincolItems
strSystemType = objItem.SystemType
Next
IfInStr(strSystemType,"x64") >0Then
Dimfso, WshShell, strFullName
Setfso = CreateObject("Scripting.FileSystemObject")
SetWshShell = CreateObject("WScript.Shell")
strFullName = WScript.FullName
IfInStr(1, strFullName,"system32",1) >0Then
strFullName =Replace(strFullName,"system32","SysWOW64",1,1,1)
WshShell.Run strFullName &" "&_
""""& WScript.ScriptFullName &"""",10,False
WScript.Quit
End If
End If
End Sub
随机文章:
这篇文章发布于 2015年07月9日,星期四,12:38,归类于 程序设计。您可以跟踪这篇文章的评论通过 RSS 2.0 feed。
您可以留下评论,或者从您的站点trackback。
64位matlab调用 com组建,64位系统VBS调用32位COM组件相关推荐
- 64位系统VBS调用32位COM组件
64位系统VBS调用32位COM组件 标签: 32位, 64位, COM, COM组件, VB, VBS, VBScript 标题: 64位系统VBS调用32位COM组件 作者: Demon 链接: ...
- 你为什么需要在64位系统下用32位程序
在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...
- 64位系统下用32位程序
在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...
- 在64位操作系统上运行32位的程序
运行 32 位程序 WOW64 子系统使 32 位程序能够在基于 x64 版本的 Windows Server 2003 和 Windows XP 专业 x64 版的运行而不用修改.WOW64 子系统 ...
- 骁龙660是32位还是64位_微软公布v2004最低处理器要求,放弃32位系统,你的CPU还能支持吗?...
最近关于win10 20H1(win10更新五月版)的消息铺天盖地席卷而来,据说只有开发者用户可以先行在MSDN订阅网站下载该版本的ISO镜像文件,对于主流消费者而言,预计要再煎熬等到28日. 而且微 ...
- 64位系统下一个32位的程序究竟可以申请到多少内存?
64位系统下一个32位的程序究竟可以申请到多少内存? cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设 ...
- Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...
1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o 2.linux 系统c语言生成.so文件,----->gcc -sh ...
- 64位系统上运行32位程序的内存限制
64位系统上运行32位程序能否申请到8G内存? 收藏到手机 转发 评论 2010-01-20 10:56 申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来 ...
- 怎样在64位安卓系统中使用32位SO库 2
之前跟的项目, 那些号称64位 CPU的主控, 跑的软件全是 32位的: 我仍然很清楚的记得, 当年 CEO 在给大家讲解财报,描述技术蓝图的时候, 宣称 64bit 软件的运行效率其实远不如预期, ...
- 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL
1.首先得安装"Connector/ODBC",就是MySQL的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是X64还是X86,只要你的应用 ...
最新文章
- LeetCode简单题之唯一摩尔斯密码词
- 8GB内存的树莓派4来啦!国内售价589元,官方还推出配套64位系统
- YARN的内存和CPU配置优化
- python websocket server 解决中文乱码
- centos6.8 如何编译php,centos 6.8 安装编译php7.1.2
- Java程序设计 图形用户界面 小巫版简易计算器
- Web前端技术历经的洗礼和蜕变
- docker fdfs修改storage ip
- C#之正则表达式、异常处理和委托与事件
- Python+pywin32批量转换Word文件为PDF文件
- 修改 exchange服务器,修改或删除 Exchange 2010
- 服务器安全,服务器密码遭篡改
- SpreadJS 纯前端表格控件应用案例:立信智能审计云平台(SACP)
- 修改 exchange服务器地址,绑定exchange邮箱服务器地址
- 记录一下之前写的文章--测试之不可承受之轻
- java.acp是什么,ACP是什么?看这一篇就够啦
- 【日志篇】java日志的桥接器和适配器和异步日志
- User-Agent结构介绍及主流浏览器User-Agent大全
- 计算机二级mysql考试经验分享(2021年3月)
- 关于3G手机USIM卡的电话簿