Как передать объект С# в VBScript?
Мой класс С#, который я хочу вернуть:
namespace GSM
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E125E")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("GSM.ParseResult")]
public class ParseResult
{
public string Status;
public HtmlNode table;
}
}
Я погуглил много сайтов, и большинство из них рекомендуют передавать object[]
в качестве возвращаемого значения С#. В этом случае 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[]
?
Спасибо!
ClassInterfaceType.AutoDual
илиClassInterfaceType.AutoDispatch
для своего класса? - person xxbbcc   schedule 27.04.2018Set a = o.Parse(...)
вместоa = o.Parse(...)
? - person Michael Gunter   schedule 27.04.2018