ActiveX Nesnesinden JScript’e Dize Dizisi
Nasıl Doğru Bir Şekilde Döndürülür
Eğer bir Win32 API ile çalışıyorsanız ve bir ActiveX nesnesinden JScript’e bir dize dizisi döndürmeniz gerekiyorsa, bazı zorluklarla karşılaşabilirsiniz. Bu sorun genellikle dizelerin, aktarım sırasında ‘kaybolduğu’ durumlarda ortaya çıkar. COM nesneleri, ActiveX ve JScript arasındaki ilişkiyi anlamak, bu ortamlarda veri işleme için kritik öneme sahiptir. Bu blog yazısında, bunu başarmanın doğru yaklaşımını ele alacağız.
Problem
COM nesnesi için IDL (Arayüz Tanımlama Dili) dosyanızda dize dizisini döndüren bir yöntem içeren bir arayüz tanımladınız. Özellikle, fonksiyon imzası aşağıdaki gibi görünmektedir:
HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);
Fonksiyon kendisi doğru çalışmasına rağmen, sorun JavaScript’te bir değişkene atandığında dizelerin görünüşte kaybolmasıyla ortaya çıkar. Verilerin doğru bir şekilde iletildiğinden emin olmamız gerekiyor.
Çözüm
ActiveX nesnesinden JScript’e dize dizisini düzgün bir şekilde iletmek için aşağıdaki detaylı adımları izleyin:
Adım 1: SAFEARRAY’i VARIANT İle Sarın
COM nesnesi ile JScript arasında iletişimi kolaylaştırmak için, SAFEARRAY
‘i geri döndürmeden önce bir VARIANT
içinde sarmalısınız. Bu, dizinin doğru bir şekilde işlenmesini sağlar ve veri kaybı olmasını önler. Bunu başarmak için aşağıda modifiye edilmiş fonksiyon kodu bulunmaktadır:
HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
// Diziyi tutmak için bir variant tanımlayın.
_variant_t ret;
// Variant tipini variant dizisi olarak ayarlayın.
ret.vt = VT_ARRAY | VT_VARIANT;
ret.parray = rgBstrStringArray; // SAFEARRAY'i atayın.
*pvarBstrStringArray = ret.Detach(); // Geri döndürmek için ayırın.
return S_OK; // Başarı ile geri döndürün.
}
Adım 2: JScript’te VBArray Kullanın
Veri VARIANT içine sarıldıktan ve ActiveX’ten başarıyla döndürüldükten sonra, JScript kodunuzda verileri doğru bir şekilde açmak için VBArray
nesnesini kullanabilirsiniz. Kullanmanız gereken kod satırı şudur:
var jsFriendlyStrings = new VBArray(axOb.GetArrayOfStrings()).toArray();
Bu tek satır, döndürülen VARIANT’ı JavaScript’e dost bir dize dizisine etkili bir şekilde dönüştürerek verileri istediğiniz gibi işlemenizi sağlar.
Sonuç
ActiveX nesnesinden JScript’e dize dizisinin aktarımını yönetmek, COM nesnelerini ve JavaScript etkileşimlerini nasıl manipüle edeceğinizi anlamaya dayanır. SAFEARRAY
‘inizi bir VARIANT
içinde sararak ve VBArray
kullanarak açarak, tüm verilerin doğru bir şekilde kayıpsız bir şekilde aktarılmasını sağlayabilirsiniz.
Artık yönetim betiklerinizde dize dizilerini başarıyla döndürme ve kullanma konusunda doğru yaklaşıma sahip olmalısınız. İyi kodlamalar!