我有一个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()
返回的对象?
答案 0 :(得分:2)
你在第三行使用的冒号实际上并没有做任何事情,只是将两个不同的语句分开。您的Dim foo : CreateObject("COMTest.Foo")
相当于:
Dim foo
CreateObject("COMTest.Foo")
创建对象但实际上并未设置对任何变量的引用。我会这样写:
Dim foo
Set foo = CreateObject("COMTest.Foo")
WScript.Echo foo.Name