在VBScript中无法访问COM组件

时间:2012-02-21 17:03:59

标签: c# .net com vbscript

我有一个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 interop,并且程序集是COM可见的。目标框架是.Net 3.5,平台目标是x86。 .dll使用32位C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /codebase COMTest.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()返回的对象?

1 个答案:

答案 0 :(得分:2)

你在第三行使用的冒号实际上并没有做任何事情,只是将两个不同的语句分开。您的Dim foo : CreateObject("COMTest.Foo")相当于:

Dim foo
CreateObject("COMTest.Foo")

创建对象但实际上并未设置对任何变量的引用。我会这样写:

Dim foo
Set foo = CreateObject("COMTest.Foo")
WScript.Echo foo.Name