У моего нынешнего работодателя есть некоторые старые / устаревшие подпрограммы VBScript, которые вызывают некоторые старые / старые программы .Net, и я пытаюсь понять, как они работают. Трудно найти хорошие учебники, поэтому я создал простую программу .Net с парой функций и кодом VBS для их вызова. Для примитивных возвращаемых типов все работает как положено, но у меня проблемы со сложными объектами.
Интерфейс C #:
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace ClassLibrary1
{
[ComVisible(true)]
[Guid("67F6AA4C-A9A5-4682-98F9-15BDF2246A74")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IClass1
{
string Hello();
List<string> HelloList();
}
}
Класс бетона C #:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace ClassLibrary1
{
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("D24536F5-ECD9-482B-8C57-C9EC2195546D")]
public class Class1 : IClass1
{
public string Hello()
{
return "Hello world, how are you?";
}
public List<string> HelloList()
{
List<string> rtn_list = new List<string>();
rtn_list.Add("String1");
rtn_list.Add("String2");
rtn_list.Add("String3");
rtn_list.Add("String4");
return rtn_list;
}
}
}
И мой VB скрипт:
' --------------------------------------------------------------
' Testing for calling .Net Framework from vbs
' --------------------------------------------------------------
Call CheckArguments
Call GetHelloTest1
Call GetHelloTest2
' --------------------------------------------------------------
' Sub : GetHelloTest2
' Desc : Create the COM object and call a function that
' returns an array of strings
' --------------------------------------------------------------
Sub GetHelloTest2
Dim objObject
Set objObject = WScript.CreateObject("ClassLibrary1.Class1")
Dim objOutput
Set objOutput = objObject.HelloList
' ?? Not sure how to iterate over the list ??
'WScript.Echo objObject.Hello
End Sub
' --------------------------------------------------------------
' Sub : GetHelloTest1
' Desc : Create the COM object and call a simple function
' --------------------------------------------------------------
Sub GetHelloTest1
Dim objObject
Set objObject = WScript.CreateObject("ClassLibrary1.Class1")
Dim objOutput
objOutput = objObject.Hello
WScript.Echo objOutput
End Sub
' --------------------------------------------------------------
' Sub : CheckArguments
' Desc : Verify the arguments and create a dictionary object
' --------------------------------------------------------------
Sub CheckArguments
text = "Arguments" & vbCrLf & vbCrLf
Set objArgs = WScript.Arguments ' Create object.
For i = 0 to objArgs.Count - 1 ' Loop through all arguments.
text = text & objArgs(i) & vbCrLf ' Get argument.
Next
WScript.Echo text ' Show arguments using Echo.
End Sub
Все отлично работает, кроме вызова HelloList, который выглядит так, как будто он что-то возвращает, но я не могу понять, как перебирать список в коде VBS? Ошибка не возвращается, и я могу использовать VS2017 для отладки и пошагового выполнения кода, быстрое наблюдение показывает это {...}, поэтому я думаю, что оно что-то вернуло, но я не уверен, что это такое?