จะส่งวัตถุ 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;
}
}
ฉันเคยค้นหาเว็บไซต์หลายแห่งใน Google และส่วนใหญ่แนะนำให้ส่ง 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[]
ได้อย่างไร
ขอบคุณ!
ClassInterfaceType.AutoDual
หรือClassInterfaceType.AutoDispatch
สำหรับชั้นเรียนของคุณ? - person xxbbcc   schedule 27.04.2018Set a = o.Parse(...)
แทนที่จะเป็นa = o.Parse(...)
- person Michael Gunter   schedule 27.04.2018