كيف يمكنني إرجاع صفيف سلاسل من ActiveX كائن إلى JScript

StackOverflow https://stackoverflow.com/questions/45169

  •  09-06-2019
  •  | 
  •  

سؤال

أنا بحاجة إلى استدعاء إلى Win32 API للحصول على سلسلة من سلاسل, وأود أن عودة مجموعة من تلك السلاسل إلى جافا سكريبت.هذا هو السيناريو الذي يعمل على الجهاز المحلي للإدارة النصوص لا مستعرض ويب.

بلدي IDL الملف لكائن COM لديه واجهة أنني أدعو إلى:

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

ترجع الدالة بشكل صحيح ، ولكن السلاسل هي الحصول على 'خسر' عندما يتم تعيين إلى متغير في جافا سكريبت.

السؤال هو:ما هي الطريقة الصحيحة للحصول على مجموعة من السلاسل وعاد إلى جافا سكريبت متغير ؟

هل كانت مفيدة؟

المحلول

إذا كنت أتذكر بشكل صحيح, سوف تحتاج إلى التفاف SAFEARRAY في VARIANT من أجل ذلك من خلال الحصول على ، ثم استخدام لذلك ، لن تتم مناقشة وجوه فك على شبيبة الجانب من الأمور:

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // ...

   _variant_t ret;
   ret.vt = VT_ARRAY|VT_VARIANT;
   ret.parray = rgBstrStringArray;
   *pvarBstrStringArray = ret.Detach();
   return S_OK;
}

ثم

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

نصائح أخرى

Shog9 هو الصحيح.COM البرمجة يتطلب من جميع النواتج تكون المتغيرات.

في الواقع ، فإنه يتطلب أيضا أن كل المدخلات أن المتغيرات وكذلك -- انظر التفاصيل سيئة من IDispatch في المفضلة لديك ملف المساعدة.انها فقط اعتقدت سحر مزدوجة واجهة تنفيذ ATL طبقات مماثلة (الذي على الأرجح هو ما كنت تستخدم) أن كنت لا داعي للقلق حول ذلك.مدخلات المتغيرات مرت قبل استدعاء التعليمات البرمجية يتم تحويلها إلى تطابق الأسلوب الخاص بك قبل التوقيع الخاص بك الفعلية ما يسمى طريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top