下载一个ocx组件,去注册一下么,是PDF预览吧,你先看下你工具箱里面有没有这个东西,然后直接拖进来,就OK了
最好能直接下载一个pdf reader,然后再自己的电脑上安装一下
工具箱里有了,但是拖进去的时候报错:未能引用。我单独注册的时候还不能注册
@so...: 报什么错,给个截图或者说详细错误之类的
@_Vegetables:
@so...:
@_Vegetables: 拖不动啊,拖过去就报上面那个错误
@_Vegetables: ArcoPDFLib,AxArcoPDFLib这两个引用失败,能否给我传一份你本地的这两个文件
@so...: 怎么分发给你?
有没有在本地注册下该active控件了,要通过register32现注册下
无法注册,注册一直失败,报错0x80070005错误,用管理员权限注册依然此错误
@so...: 0x80070005 -〉 拒绝访问。先看看文件是否被占用了。
@Launcher: 没有被占用,对文件降级权限了依然不能注册成功
@so...: 你注册的是 ArcoPDF.dll 还是 ArcoPDF64.dll ?
@so...: 你有管理员权限吗?
@Launcher: 管理员权限下注册的ArcoPDF.dll,报错如下:
@so...: 那你手动在注册表中把相关项添加上吧。
@Launcher: 怎么添加,求指教
@so...: 你先去注册表搜索下3B813CE7-7C10-4F84-AD06-9DF76D97A9AA 和 CA8A9780-280D-11CF-A24D-444553540000
@Launcher: 然后呢
@so...: 找到没有,找到后,把内容贴出来看看。
@Launcher:
@so...: 你把 CA8A9780-280D-11CF-A24D-444553540000 展开,看下 InprocServer32 项的值
@Launcher:
这是不是说已经注册了
@so...: 你看那个路径下是否有 AcroPDF.dll ?路径是否同你在 VS 添加时显示的组件的路径一致?
@Launcher: 路径是对的,vs引用的路径也一致。
@so...: 你的操作系统是 32 位的?
@Launcher: 嗯
@so...: 大哥,方便qq吗,qq直接请教您
@so...: 看 ProgID 的值,假设为 AcroPDF.PDF.1,然后看看 HKEY_CLASSES_ROOT\AcroPDF.PDF 和 HKEY_CLASSES_ROOT\AcroPDF.PDF.1 是否存在。
@so...: 再看 TypedLib,检查 [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}] 是否存在,其内容如下:
[HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}] @="" [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}\1.0] @="Adobe Acrobat 7.0 Browser Control Type Library 1.0" [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}\1.0\0] [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}\1.0\0\win32] @="C:\\Program Files\\Common Files\\Adobe\\Acrobat\\ActiveX\\AcroPDF.dll" [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}\1.0\FLAGS] @="0" [HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}\1.0\HELPDIR] @="C:\\Program Files\\Common Files\\Adobe\\Acrobat\\ActiveX\\"
@so...: IAcroAXDocShim 的注册表项应该是这样的:
[HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}] @="IAcroAXDocShim" [HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}\NumMethods] @="7" [HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}\ProxyStubClsid] @="{00020424-0000-0000-C000-000000000046}" [HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}\ProxyStubClsid32] @="{EE5A151A-AD2A-4CEE-AD65-228B59F5B4AD}" [HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}\TypeLib] "Version"="1.0" @="{05BFD3F1-6319-4F30-B752-C7A22889BCC4}"
@so...: 不方便,你还是先卸载 Adobe Reader XI 后,再去下载一个安装吧
@Launcher: 我本地装的是Adobe Reader X,已经重装过多次了,不好使
@Launcher: HKEY_CLASSES_ROOT\AcroPDF.PDF 和 HKEY_CLASSES_ROOT\AcroPDF.PDF.1 都存在,但是都存在两个
@so...: 不好使,那就只能手动修改注册表项。
@so...: 啥叫都存在两个?
@so...: 你的机器是不是在域中?
@Launcher: AcroPDF.PDF 和 AcroPDF.PDF.1存在两个
@Launcher: 没有在域中
@so...: 你是说有两个 HKEY_CLASSES_ROOT\AcroPDF.PDF ,另外还有两个 HKEY_CLASSES_ROOT\AcroPDF.PDF.1 吗?
@Launcher: 其实问题的本质是winform导入adobe reader控件失败,是不是有其他原因引起的呢,不是注册问题呢?
@Launcher: IAcroAXDocShim注册表找不到
@so...: 我只能告诉你确实是注册表项的问题,你可以稍微学习点 COM 的知识。IAcroAXDocShim(HKEY_CLASSES_ROOT\Interface\3B813CE7-7C10-4F84-AD06-9DF76D97A9AA) 是 Interface,实现它的类是 AcroPDFClass(HKEY_CLASSES_ROOT\CLSID\CA8A9780-280D-11CF-A24D-444553540000).
HKEY_CLASSES_ROOT\AcroPDF.PDF 中记录了版本号和 CLSID,创建 COM 组件时可以通过 CA8A9780-280D-11CF-A24D-444553540000,也可以通过 "AcroPDF.PDF" 或 “AcroPDF.PDF.1” 来创建,因为 HKEY_CLASSES_ROOT\AcroPDF.PDF 中记录了版本号和 CLSID,所以程序可以通过字符串(ProgID)来从注册表得到 CLSID。
@so...: 你的注册表至少应该包含下列项:
ProgID:
HKEY_CLASSES_ROOT\AcroPDF.PDF
HKEY_CLASSES_ROOT\AcroPDF.PDF.1
TypeLib:
HKEY_CLASSES_ROOT\TypeLib\{05BFD3F1-6319-4F30-B752-C7A22889BCC4}
Interface:
HKEY_CLASSES_ROOT\Interface\{3B813CE7-7C10-4F84-AD06-9DF76D97A9AA}] // IAcroAXDocShim
HKEY_CLASSES_ROOT\Interface\{7EA23D88-569E-4EFD-9851-A1528A7745F9}] // ISPOpenDocuments
HKEY_CLASSES_ROOT\Interface\{E790E1D1-9DE8-4853-8AC6-933D4FD9C927}] // _IAcroAXDocShimEvents
Class:
HKEY_CLASSES_ROOT\CLSID\{CA8A9780-280D-11CF-A24D-444553540000} // 实现 IAcroAXDocShim
HKEY_CLASSES_ROOT\CLSID\{24DA047B-40C0-4018-841B-6B7409F730FC} // 实现 ISPOpenDocuments
@so...: 你可以使用 Office 的 VBA 编辑器,写入如下代码来测试组件是否正确安装:
dim obj as Object
set obj = CreateObject("AcroPDF.PDF")
set obj = nothing
@Launcher: 下面这种情况是不是有问题的
@so...: 你必须再看仔细点,AcroPDF.PDF 同 AcroPDF.FDF 是不一样的。
@Launcher: 大哥,我检查了下,你说的注册表中这些项都有
@so...: 用这个代码测试过了吗?
dim obj as Object
set obj = CreateObject("AcroPDF.PDF")
set obj = nothing
注册表项都有,每个项的值都对吗?
@so...: 比较好的方式是你找台正确的机器,把相关的注册表项都对比下。
@Launcher: 我想想办法吧,谢了
@so...: 不要灰心,要有信心,理解原理后,就是耐心的动手。你这不算啥,我给客户修复 Office 问题,那可是有好几十个注册表项的。
@Launcher: 明白,非常感谢您