主题:[讨论]Automation 问题
啊远
[专家分:2610] 发布于 2008-10-22 16:37:00
REM ------------------------------------------------
REM - 未引入 CorelDRAW 库时这样调用 : Example1
REM -----------------------------------------------
Dim oCdr As Object
Dim oDoc As object
Set oCdr = CreateObject("CorelDRAW.Application.13")
Set oDoc = oCdr.ActiveDocument
oDoc.SaveAs("E:\abcd.cdr")
Set oDoc = Nothing
Set oCdr = Nothing
REM ------------------------------------------------
REM - 引入 CorelDRAW 库后我这样调用 : Example2
REM -----------------------------------------------
Dim oCdr As Object
Dim oDoc As Document
Set oCdr = CreateObject("CorelDRAW.Application.13")
Set oDoc = oCdr.ActiveDocument
oDoc.SaveAs("E:\abcd.cdr")
Set oDoc = Nothing
Set oCdr = Nothing
Example1 可以调用 SaveAs 方法时说类型转换错误!
Example2 却可以通过!
按理说Example1 运行肯定没有问题才对呀!
大家必须来理一理这个问题了!
最后更新于:2008-10-22 16:41:00
回复列表 (共15个回复)
沙发
bcahzvip [专家分:6040] 发布于 2008-10-22 19:11:00
ActiveDocument 返回什么对象?
是第三方控件吧?
板凳
啊远 [专家分:2610] 发布于 2008-10-23 08:07:00
是 CorelDRAW X3 的一个当前处于活动状态的文档呀!
3 楼
wdkshp [专家分:5490] 发布于 2008-10-23 09:22:00
未引入 CorelDRAW 库时,Set oCdr = CreateObject("CorelDRAW.Application.13")运行时电脑(或者说VB运行库)根本不知道oCdr对象是什么对象,因为CorelDRAW.Application.13不是VB内置的,属于第三方程序。
说白一点,就是oCdr并没有成功赋值,他也并不是CorelDRAW.Application.13对象,所以他也并没有SaveAs属性
4 楼
啊远 [专家分:2610] 发布于 2008-10-23 09:31:00
不可能的! 像Example1 这样的过程! 就用 VBScript 任何语言!只要在WINDOWS平台下能用COM接口的语言都能成功! 第三方程序如果没有安装! 那么 Set oCdr = CreateObject("CorelDRAW.Application.13") 肯定就会出错了! 而不会在使用 SaveAs 方法时才错误!
而且如果是 SaveAs 方法不存在! 那么肯定不是类型转换的错误! 还是没有方法的错误!
如果 SaveAs 不存在! 那么 Example2 也不可能成功运行!
据我的了解! 在 VB 中的引入库只是提供对写代码的自动完成的方便,没有具体的连接使用,
连接使用是在程序后期运行时建立的!这介COM接口的基本原理所限!
5 楼
老大徒伤悲 [专家分:29120] 发布于 2008-10-23 17:17:00
看了,但是也白看。
既没有看懂你想干什么
也没有看懂你要讨论什么
6 楼
bcahzvip [专家分:6040] 发布于 2008-10-24 00:57:00
恩,我也看不懂.
既然都知道了COM了.就加载控件里对象库不就得了!~
'Dim oDoc As Document
这个Document对象,未必是ActiveDocument返回的对象.
既然它已经提示错误了,那就不是了!~
都问你了, ActiveDocument 返回的对象是什么. (CTRL+I)
不用做介绍.看英文就知道意思.
7 楼
啊远 [专家分:2610] 发布于 2008-10-24 08:32:00
我意思就是通用的方法调用 oDoc 对象的 SaveAs 方法不成功!
也就是 oDoc 对象这样声明时 Dim oDoc as Object 当 oDoc 得到了实际的接口时调用还是不成功!
而如果通过引用库后这样声明 Dim oDoc as Document 这样还是没有得到实际接口一样也得通过
Set oDoc = oCdr.ActiveDocument 来把实际的接口指针赋于 oDoc ;
但是引用库之后就可以成功调用 SaveAs 方法了!
而在我看来! 两种方法也就是引用库和没有引用库调用都应该是能正确调用才对!
不知道这是为什么不成功!因为没有引用库也能得到正确的 ActiveDocument 接口
而且也没有说 SaveAs 方法不存在! 而是存在的!就是参数类型说不正确!但是引用过库后参数类型就正确了!
而我不管是引用了库还是没有引用库!都是这样调用的 SaveAs(字符串常量值)
所以不解!是不是VB在引用库时才能对 参数是 BYREF 还是 BYVAL 方式传值前期确定?
8 楼
bcahzvip [专家分:6040] 发布于 2008-10-24 09:04:00
哇!~,更乱了!~更不知道你在说什么咧!~
9 楼
merry05 [专家分:8920] 发布于 2008-10-24 11:54:00
不知道我的理解能力提高了,还是。。。
我知道啊远想问什么,但是觉得问题很不可思议。
自己曾用VB写过一个DLL,在VB中调用,也是没有引入库,只是注册一下然后CreateObject创建对象。但一切正常,没遇到过你所说的里面有些方法不能用!
10 楼
啊远 [专家分:2610] 发布于 2008-10-24 16:12:00
楼上的你理解正确了!
我来回复