วิธีการส่งคืน Array of Strings จาก ActiveX Object ไปยัง JScript อย่างถูกต้อง

หากคุณกำลังทำงานกับ Win32 API และต้องการส่งคืนอาร์เรย์ของสตริงจาก ActiveX object ไปยัง JScript คุณอาจพบกับความท้าทายบางประการ ปัญหานี้มักเกิดขึ้นเมื่อสตริงดูเหมือนจะ ‘หาย’ ไปในระหว่างการส่งข้อมูล การเข้าใจความสัมพันธ์ระหว่าง COM objects, ActiveX และ JScript เป็นสิ่งสำคัญสำหรับการจัดการข้อมูลอย่างประสบความสำเร็จในสภาพแวดล้อมเหล่านี้ ในบทความนี้ เราจะพูดคุยเกี่ยวกับวิธีการที่ถูกต้องในการบรรลุเป้าหมายนี้

ปัญหา

คุณได้กำหนดอินเตอร์เฟซในไฟล์ IDL (Interface Definition Language) สำหรับ COM object ซึ่งรวมถึงวิธีการที่ส่งคืนอาร์เรย์ของสตริง โดยเฉพาะอย่างยิ่ง ลายเซ็นของฟังก์ชันจะปรากฏดังนี้:

HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);

แม้ว่าฟังก์ชันจะทำงานได้อย่างถูกต้อง แต่ปัญหาจะเกิดขึ้นเมื่อสตริงถูกกำหนดให้กับตัวแปรใน JavaScript ส่งผลให้สตริงดูเหมือนจะหายไป เราจำเป็นต้องมั่นใจว่าข้อมูลถูกส่งผ่านอย่างถูกต้อง

วิธีแก้ปัญหา

เพื่อที่จะส่งผ่านอาร์เรย์ของสตริงจาก ActiveX object ของคุณไปยัง JScript ได้อย่างถูกต้อง ให้ปฏิบัติตามขั้นตอนโดยละเอียดดังนี้:

ขั้นตอนที่ 1: ห่อ SAFEARRAY ใน VARIANT

เพื่ออำนวยความสะดวกในการสื่อสารระหว่าง COM object และ JScript คุณต้องห่อ SAFEARRAY ใน VARIANT ก่อนที่จะส่งกลับ นี่จะช่วยให้จัดการอาร์เรย์ได้อย่างถูกต้องและมั่นใจว่าจะไม่มีข้อมูลสูญหาย นี่คือโค้ดฟังก์ชันที่ปรับปรุงแล้วเพื่อให้บรรลุเป้าหมายนี้:

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // ประกาศตัวแปร variant เพื่อเก็บอาร์เรย์
   _variant_t ret;
   // ตั้งค่าประเภทของ variant เป็นอาร์เรย์ของ variants
   ret.vt = VT_ARRAY | VT_VARIANT;
   ret.parray = rgBstrStringArray; // กำหนด SAFEARRAY
   *pvarBstrStringArray = ret.Detach(); // แยกออกเพื่อส่งคืน
   return S_OK; // ส่งคืนความสำเร็จ
}

ขั้นตอนที่ 2: ใช้ VBArray ใน JScript

เมื่อข้อมูลถูกห่ออยู่ใน VARIANT และถูกส่งคืนจาก ActiveX สำเร็จแล้ว คุณสามารถใช้วัตถุ VBArray ในโค้ด JScript ของคุณเพื่อเปิดเผยข้อมูลอย่างถูกต้อง บรรทัดของโค้ดที่คุณต้องการคือ:

var jsFriendlyStrings = new VBArray(axOb.GetArrayOfStrings()).toArray();

บรรทัดเดียวนี้จะเปลี่ยน VARIANT ที่ส่งคืนให้กลายเป็นอาร์เรย์ของสตริงที่เหมาะกับ JavaScript ช่วยให้คุณจัดการข้อมูลได้ตามที่ต้องการ

สรุป

การจัดการการส่งผ่านอาร์เรย์ของสตริงจาก ActiveX object ไปยัง JScript ขึ้นอยู่กับการเข้าใจวิธีการจัดการ COM objects และการโต้ตอบของ JavaScript โดยการห่อ SAFEARRAY ของคุณใน VARIANT และใช้ VBArray เพื่อเปิดเผยมัน คุณสามารถมั่นใจได้ว่าข้อมูลทั้งหมดจะถูกส่งผ่านอย่างถูกต้องโดยไม่สูญหาย

ตอนนี้คุณควรมีวิธีการที่ถูกต้องในการส่งคืนและใช้ประโยชน์จากอาร์เรย์ของสตริงในสคริปต์ทั้งหลายของคุณ ขอให้สนุกกับการเขียนโค้ด!