วิธีการส่งคืน 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
เพื่อเปิดเผยมัน คุณสามารถมั่นใจได้ว่าข้อมูลทั้งหมดจะถูกส่งผ่านอย่างถูกต้องโดยไม่สูญหาย
ตอนนี้คุณควรมีวิธีการที่ถูกต้องในการส่งคืนและใช้ประโยชน์จากอาร์เรย์ของสตริงในสคริปต์ทั้งหลายของคุณ ขอให้สนุกกับการเขียนโค้ด!