У меня есть проект библиотеки классов 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.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()
?