Bagaimana cara meneruskan objek C# ke VBScript?
Kelas C# saya, yang ingin saya kembalikan adalah:
namespace GSM
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E125E")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("GSM.ParseResult")]
public class ParseResult
{
public string Status;
public HtmlNode table;
}
}
Saya telah mencari banyak situs di Google dan kebanyakan dari mereka merekomendasikan untuk meneruskan object[]
sebagai nilai pengembalian C#. Dalam hal ini VBScript mengulangi dan mengenali tipe dan nilai objek dengan baik. Misalnya, fungsi yang mengembalikannya adalah seperti ini:
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;
}
dan VBScript, yang berfungsi dengan baik:
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
Dalam hal ini tiga pesan akan ditampilkan: ParseResult
, GSM.ParseResult
dan OK
.
Tetapi ketika saya mencoba mengubah fungsi saya menjadi
public ParseResult Parse(string userid, string password, string startDate, string endDate)
{
ParseResult parseResult = new ParseResult();
parseResult.Status="OK";
return parseResult;
}
dan mencoba memanggilnya dalam VBScript dengan kode
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
pesan yang akan dikirim adalah: String
, GSM.ParseResult
dan pesan tentang pengecualian dengan kode 800A01A8 untuk baris Wscript.Echo a.Status
.
Mengapa VBScript mengenali tipe objek yang dikembalikan sebagai String, dan tidak sebagai tipe kelas saya, jika objek dikembalikan secara langsung, tetapi mengenali tipe sebagai ParseResult
, jika nilai yang dikembalikan digabungkan menjadi object[]
?
Bagaimana cara memaksa VBScript mengenali tipe objek yang dikembalikan sebagai ParseResult
tanpa membungkusnya ke dalam object[]
?
Terima kasih!
ClassInterfaceType.AutoDual
atauClassInterfaceType.AutoDispatch
untuk kelas Anda? - person xxbbcc   schedule 27.04.2018Set a = o.Parse(...)
dan bukannyaa = o.Parse(...)
? - person Michael Gunter   schedule 27.04.2018