Как передать объект C # в VBScript?
Мой класс C #, который я хочу вернуть:
namespace GSM
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E125E")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("GSM.ParseResult")]
public class ParseResult
{
public string Status;
public HtmlNode table;
}
}
Я погуглил много сайтов, и большинство из них рекомендует передавать object[]
в качестве возвращаемого значения C #. В этом случае VBScript выполняет итерации и корректирует типы и значения объектов. Например, функция, которая возвращает его, выглядит примерно так:
public object[] Parse(string userid, string password, string startDate, string endDate)
{
ParseResult parseResult = new ParseResult();
parseResult.Status="OK";
object o = (object)parseResult;
object[] oa = new object[] { o };
return oa;
}
и VBScript, что хорошо с ним работает:
Dim o
Set o = CreateObject("1C_GSM.TestComClass")
Dim a
a = o.Parse("51597", "********", "01-03-2017", "31-03-2017")
For Each entry In a
Wscript.Echo TypeName(entry)
Wscript.Echo entry
Wscript.Echo entry.Status
Next
В этом случае будут показаны три сообщения: ParseResult
, GSM.ParseResult
и OK
.
Но когда я пытаюсь изменить свою функцию на
public ParseResult Parse(string userid, string password, string startDate, string endDate)
{
ParseResult parseResult = new ParseResult();
parseResult.Status="OK";
return parseResult;
}
и пытается вызвать его в VBScript с кодом
Dim o
Set o = CreateObject("1C_GSM.TestComClass")
Dim a
a = o.Parse("51597", "********", "01-03-2017", "31-03-2017")
Wscript.Echo TypeName(a)
Wscript.Echo a
Wscript.Echo a.Status
сообщения будут: String
, GSM.ParseResult
и сообщение об исключении с кодом 800A01A8 для строки Wscript.Echo a.Status
.
Почему VBScript распознает тип возвращаемого объекта как String, а не как мой тип класса, если объект был возвращен напрямую, но преобразует тип как ParseResult
, если возвращаемое значение было перенесено в object[]
?
Как заставить VBScript распознавать тип возвращаемого объекта как ParseResult
, не заключая его в object[]
?
Спасибо!