DSOFramer 之一:在 64 位系统注册 DSOFramer
DSOFramer是微软提供的一款用于在线编辑、调用Word、Excel等Office程序的ActiveX组件。很多第三方的Office组件都是基于DSOFramer组件开发的。今天我们不讲如何使用DSOFramer组件,网上关于DSOFramer组件使用方法的文章已经很多了,而是讲一下在使用DSOFramer组件开发时的一些坑。
DSOFramer组件的全名是dsoframer.ocx。所有关于DSOFramer组件使用方法的文章都会告诉你,使用DSOFramer组件,第一步必须在Windows操作系统中注册该组件。注册方法很简单:
- 将dsoframer.ocx复制到%windir%\system32目录。
- 在命令行运行regsvr32命令注册dsoframer.ocx。
注册成功后,Windows操作系统会提示“DllRegisterServer 在 dsoframer.ocx 成功”。
.
到目前为止,貌似一切顺利。不过如果你像我一样使用64位Windows操作系统,你已经不知不觉掉到坑里去了。为什么呢?我们继续往下看。
假设,我们已经编写好调用DSOFramer的程序,当我们运行程序时会发生什么事情?“铛”!是的,没错,系统弹出“应用程序无法处理的异常”。

为什么会出现这个错误呢?我们不是已经在system32目录注册dsoframer.cox了吗?为什么会提示“没有注册类”呢?
是的,问题就在这里。如果我们使用的是32位Windows操作系统,那么,OK,程序在运行时不会有任何问题。但是很不幸,我使用的是64位Windows操作系统。使用64位Windows操作系统的朋友可能会发现在%windir%目录下除了常见的system、System32目录以外,还有一个SysWOW64目录。在32位Windows操作系统中,System32目录用于存放32位DLL,而在64位Windows操作系统中,据称为了保持向下兼容性,System32目录用于存放64位DLL,而新增加的SysWOW64用于存放兼容的32位DLL(虽然感觉上System32和SysWOW64两个目录的作用应该完全相反)。
之所以会出现前面的异常,是因为DSOFramer是32位组件。因此,在32位Windows操作系统中,应该将其复制到System32目录中注册;而在64位Windows操作系统中,应该将其复制到SysWOW64目录中注册,而不是复制到System32目录中。

如果在64位Windows操作系统中,我们将dsoframer.ocx复制到SysWOW32目录,然后使用regsvr32注册组件。那么,运行程序时就不会再出现“没有注册类”的异常了。
另外,需要注意的是,在Visual Studio的编译选项中,目标CPU选项的默认设置是Any CPU。很多情况下,我们不会改变这个默认设置,而是由.net framework JIT在运行时根据系统环境自由决定如何装载程序。但是,由于DSOFramer是32位组件的原因,在编写调用DSOFramer组件的应用程序时,应该将编译选项中的目标CPU设置为x86。这样才能保证程序在运行时能够在正确的位置找到注册的DSOFramer组件。
因此,在使用DSOFramer组件时,最佳实践是:
- 在32位Windows操作系统中,将dsoframer.ocx组件复制到%windir%\System32目录,并使用regsvr32命令注册。
- 在64位Windows操作系统中,将dsoframer.ocx组件复制到%windir%\SysWOW64目录,并使用regsvr32命令注册。
- 在Visual Studio中,将调用DSOFramer组件项目的编译选项中的目标CPU设置为x86。
最后,SysWOW64中“WOW64”的含义是“Windows on 64-bit Windows”。所以,你就会明白,为什么在64位Windows操作系统中把dsoframer.ocx组件复制到SysWOW64目录了,因为它是运行在“64位Windows上的(32位)Windows”的32位DLL组件。
DSOFramer 之一:在 64 位系统注册 DSOFramer的更多相关文章
- WIN7 64位系统注册银行支付组件
WIN7 64位系统注册银行支付组件目前只尝试注册了银联的chinapay.dll和工行的icbcebankutil.dll 1.将dll文件拷贝到windows\syswow64\文件夹下(Win7 ...
- C# 32位程序访问64位系统注册表
原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注 ...
- win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
TeeChart控件就不多介绍了,很多朋友不知道开始怎么注册使用,尤其是在64位系统下如何注册的问题,具体如下: win7.win8 64位系统问题所在: 64位的系统一般都是可以安装32位程序的 ...
- Win7 64位系统 注册 ocx控件
32位系统注册ocx就不谈了.网上一搜一大把.下面说下win7 64位 旗舰版下如果注册ocx控件 1.首先复制 XXXX.OCX文件到“C:\Windows\SysWOW64”目录. (XXX ...
- 64位系统VBS调用32位COM组件
64位系统VBS调用32位COM组件 标签: 32位, 64位, COM, COM组件, VB, VBS, VBScript 标题: 64位系统VBS调用32位COM组件作者: Demon链接: ht ...
- 使用.NET 4.0+ 操作64位系统中的注册表
一.64位系统中的注册表 以 LocalMachine 中的启动项为例: 64位应用的注册表位置还是在: SOFTWARE\Microsoft\Windows\CurrentVersion\Run 而 ...
- 64位系统下注册32位dll文件
64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位C ...
- 64位系统未注册"MSDAORA.1"提供程序
原因:如错误,64位系统未注册"MSDAORA.1"提供程序 解决:在IIS应用程序池中找到自己的网站,打开高级设置,设置“启用32位应用程序”为“True”即可. 另外还有其他解 ...
- 使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表
原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表 我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的 ...
随机推荐
- java -jar 执行 eclipse export 的 jar 包报错处理
1. 错误1:打 jar 包执行,报错,找不到 类库的 jar 包 F:\>java -jar remoteLogin.jarException in thread "AWT-Even ...
- MFC MDI 主框架和标签页数据互操作
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- Android 解读.apk解压后文件详细说明
转自:http://xdang.org/post-602.html 以下原文: 反编译 — 在apk文件中能得到什么 最近在做android客户端与服务器安全通信,有一种常见的不安全因素:很多软件常常 ...
- HTTP 请求报文 响应报文
引言 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发 ...
- Python搜索目录下指定的文件,并返回绝对路径(包括子目录)
#!/usr/bin/python #coding=UTF-8 #FileName:search.py #文件搜索 import os; import sys; returnList = []; de ...
- 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)
hi 今天登上来,发现竟然有了3个评论~~加油吧! 这周的计划其实远远没有达到,然后下周还有一大堆事情...那么...周末好好玩吧~ 今天试图完结MySQL的基础篇知识,小白变为大白? 1.MySQL ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
- [No000039]操作系统Operating Systems用户级线程User Threads
多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址 ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- sql server 修改表结构语法大全
1.增加字段 ) 2.删除字段 alter table table_name drop column column_name 3.修改字段类型 alter table table_name alter ...