我最近从他父亲大约30年前写的朋友那里得到了一个小型CG软件包。它有一个窗口,可以在其中创建和渲染一些实体图元。有趣的是,它具有VBA界面,我可以在Excel中(将其称为TheSoftware)使用Set app = CreateObject(“ TheSoftware.Application”)来创建这样的应用程序(在设置app之后。Visible为True,可以在屏幕上获取窗口) )!但是,GetObject(,“ TheSoftware.Application”)返回“ ActiveX组件无法创建对象”错误。对我而言,更令人惊讶的是,GetObject(“”,“ TheSoftware.Application”)成功创建了应用程序!我有大约900 KB的C ++源代码可以共享,但是为了快速起见,是否有人以前曾遇到过此问题,或者不清楚是什么问题?我不是C ++专家,作者于4年前辞世。我已经看到了“相反”的问题,即无法创建对象,但在获取对象时可以,但不是。任何想法都欢迎,谢谢!
答案 0 :(得分:0)
GetObject(FName)打开一个文件或连接到一个文件(如果已打开)(如果指定了类,则使用该类来打开它),或者GetObject(,“ Appname”)连接到一个正在运行的应用程序实例。您正在创建一个空白文件。
Visual Basic脚本版
GetObject函数
另请参阅CreateObject函数
要求
版本5
从文件返回对自动化对象的引用。
GetObject([pathname] [, class])
参数
路径名
可选;串。包含要检索的对象的文件的完整路径和名称。
如果省略路径名,则需要class。
class
可选;串。对象的类。
class参数使用语法appname.objectype并具有 零件:
使用GetObject函数从文件访问自动化对象 并将对象分配给对象变量。使用Set语句 将GetObject返回的对象分配给对象变量。对于 示例:
Dim CADObject Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
执行此代码后,与 指定的路径名已启动,并且指定文件中的对象为 活性。 如果路径名是长度为零的字符串(“”),则为GetObject 返回指定类型的新对象实例。如果路径名 省略参数,GetObject返回当前的活动对象 指定的类型。如果不存在指定类型的对象,则 错误发生。
某些应用程序允许您激活文件的一部分。添加一个 感叹号(!)到文件名的末尾,并在其后跟一个 字符串,用于标识您要激活的文件部分。对于 有关如何创建此字符串的信息,请参见文档 创建对象的应用程序。
例如,在绘图应用程序中,您可能有多层 到存储在文件中的图形。您可以使用以下代码来 在名为SCHEMA.CAD的图形中激活一个层:
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
如果您未指定对象的类,则Automation将根据文件确定要启动的应用程序和要激活的对象 您提供的名称。但是,某些文件可能支持多个类 对象。例如,工程图可能支持三种不同的类型 对象集:应用程序对象,图形对象和工具栏 对象,所有对象都是同一文件的一部分。指定哪个 要激活的文件中的对象,请使用可选类 论点。例如:
Dim MyObject Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")
在前面的示例中,FIGMENT是绘图应用程序的名称 DRAWING是它支持的对象类型之一。一旦有物体 激活后,可以使用对象变量在代码中引用它 定义。在前面的示例中,您访问属性和方法 使用对象变量MyObject的新对象。例如:
MyObject.Line 9, 90 MyObject.InsertText 9, 100, "Hello, world." MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
注意在当前实例存在时使用GetObject函数 对象的名称,或者如果您想使用文件创建对象 已加载。如果没有当前实例,并且您不希望 对象从加载文件开始,请使用CreateObject函数。
如果对象已将其自身注册为单实例对象,则仅 无论多少次,都会创建对象的一个实例 CreateObject被执行。对于单实例对象,GetObject 零长度调用时总是返回相同的实例 字符串(“”)语法,如果pathname参数为 省略。
要求版本5
另请参阅CreateObject函数
©2001 Microsoft Corporation。保留所有权利。
内部版本:主题版本5.6.9309.1546
这些也是每种表单进行的COM API调用。从COM文档的自动化部分开始。
CreateObject(“ ProgID”)
CLSIDFromProgID
CoCreateInstance
QueryInterface获取IDispatch接口。
GetObject(“文件名”,“ ProgID”)
CLSIDFromProgID
CoCreateInstance
用于IPersistFile接口的QueryInterface。
在IPersistFile界面上加载。
QueryInterface获取IDispatch接口。
GetObject(“文件名”)
CreateBindCtx为后续功能创建绑定上下文。
MkParseDisplayName返回BindMoniker的绰号句柄。
BindMoniker返回一个指向IDispatch接口的指针。
释放标记句柄。
发布上下文。
GetObject(“ ProgID”)
CLSIDFromProgID
关于类ID的GetActiveObject。
QueryInterface获取IDispatch接口。
将x设为新界面
查找接口的CLSID。
CoCreateInstance
QueryInterface