COM组件没有';t在VBScript中保持可访问性
本文关键字:VBScript 访问 组件 COM | 更新日期: 2023-09-27 18:25:15
我有一个C#类库项目(dll),它只有一个类COMTest:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace COMTest
{
[Guid("45D639E4-FDDE-4b7b-A35F-FC19856DFF24")]
[ComVisible(true)]
public class Foo
{
public Foo()
{
Console.WriteLine("Constructing Foo");
}
private string mName = "FOO";
public string Name
{
get { return mName; }
set { mName = value; }
}
}
}
该项目已注册为COM互操作,并且程序集在COM中可见。目标框架是.Net 3.5,平台目标是x86。使用32位C:'Windows'Microsoft.NET'Framework'v2.0.50727'RegAsm.exe /codebase COMTest.dll
注册.dll
我正试图从VBScript(同样是32位,使用C:'Windows'SysWOW64'cscript.exe test.vbs
)访问此类,但在脚本中获取Foo
的实例时似乎遇到了问题。我可以使用该类;我就是记不起它了。
这是我的脚本:
Wscript.Echo "CreateObject(""ComTest.Foo"").Name Results: " + CreateObject("COMTest.Foo").Name
IF IsEmpty(CreateObject("COMTest.Foo")) THEN Wscript.Echo "CreateObject() is empty" ELSE Wscript.Echo "CreateObject() is NOT empty"
DIM foo : CreateObject("COMTest.Foo")
IF IsEmpty(foo) THEN Wscript.Echo "foo is empty" ELSE Wscript.Echo "foo is NOT empty"
这是输出:
Constructing Foo
CreateObject("ComTest.Foo").Name Results: FOO
Constructing Foo
CreateObject() is NOT empty
Constructing Foo
foo is empty
正如您所看到的,CreateObject()
调用成功了——我只是无法保留对返回对象的引用(在foo
中)。
我觉得我错过了一些简单的东西。如何保留从CreateObject()
返回的对象?
您在第三行中使用的冒号实际上没有任何作用,它只是分隔两个不同的语句。您的Dim foo : CreateObject("COMTest.Foo")
相当于:
Dim foo
CreateObject("COMTest.Foo")
它创建了对象,但实际上并没有将其引用设置为任何变量。我会这样写:
Dim foo
Set foo = CreateObject("COMTest.Foo")
WScript.Echo foo.Name