घर
Top.Mail.Ru Yandeks.Metrika
मंच: "अन्य";
वर्तमान संग्रह: 2017.07.09;
डाउनलोड करें: [xml.tar.bz2];

नीचे

डेल्फी में IActiveScript (vx = AV में Msxml2.DOMDocument बनाना) इसी तरह की शाखाएँ खोजें


Кто б сомневался ©   (2016-05-20 16:21) [0]

एक x32 प्रोग्राम है जो COM - यानी के माध्यम से vbs स्क्रिप्ट चला सकता है। IActiveScript, IActiveScriptParse और IActiveScriptSite का उपयोग किया जाता है (और कुछ नहीं)।

लगभग यहाँ वर्णित के रूप में किया गया था:
http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/activescript.htm
केवल IActiveScriptSiteWindow के बिना।

यानी स्क्रिप्ट का पाठ लें और इसे IActiveScriptParse.ParseScriptText में फेंक दें।

Vbs स्क्रिप्ट एक धमाके के साथ काम करती हैं, लेकिन एक समस्या थी।

यदि vbs स्क्रिप्ट में एक पंक्ति है
सेट xmlDoc = CreateObject ("MSXML2.DOMDocument")
या
सेट xmlDoc = createobject ("Microsoft.XMLDOM")

यह xml फ़ाइलों को पार्स करने के लिए एक वस्तु है -
तब IActiveScriptParse.ParseScriptText में इस तरह की स्क्रिप्ट एवी के माध्यम से पूरे कार्यक्रम को नष्ट कर देती है। भले ही vbs फाइल में केवल एक ही लाइन हो।
कोई त्रुटि पाठ नहीं है। स्टूपिडली ए.वी.
Win XP और Win 10 एक समान हैं।
इवेंट व्यूअर - खाली।

लेकिन, अगर आप विंडोज पर एक ही vbs स्क्रिप्ट चलाते हैं (उदाहरण के लिए, cmd.exe के माध्यम से), तो सब कुछ ठीक हो जाता है - कोई त्रुटि नहीं - ऑब्जेक्ट बनाया गया है और काम करता है, डेटा को वापस कर रहा है xml फ़ाइल। किसी कारण के लिए, समस्या केवल COM के साथ है।

यदि कोई IActiveScriptParse.ParseScriptText का उपयोग करता है, तो आप अपने लिए जांच नहीं कर सकते हैं कि क्या vbs लाइन सेट xmlDoc = CreateObject ("MSXML2.DOMDocument") के साथ काम करेंगे।

मैंने Msxml2.DOMDocument.6.0 और Msxml2.DOMDocument.3.0 - एक ही बात दोनों की कोशिश की।

यहाँ vbs जाँच के लिए एक पूरी स्क्रिप्ट का एक उदाहरण है:

सेट करें objDoc = CreateObject ("MSXML.DOMDocument") objDoc.Load "d: \ Test.xml" ObjRoot = objDoc.documentElement सेट करें s = "" t = "" ObjRoot.childNodes में प्रत्येक बच्चे के लिए s = s & child.getAttribute ("नाम") और "" अगला "wScript.echo (s)" दिखाता है "अल्फा बीटा गामा"

xml:
<? xml संस्करण = "1.0"?> <रूट> <संपत्ति का नाम = "अल्फा" मान = "1" /> <संपत्ति का नाम = "बीटा" मान = "2" /> <संपत्ति का नाम = "गामा" मान = "3" /> </ रूट>

धन्यवाद, ches यह कहते हुए कि मुझे पता नहीं है कि क्या करना है ...



iop ©   (2016-05-20 16:36) [1]

तो अगर यह cmd के तहत काम नहीं करता है,
यह चीज श्रीपैर, अक्ष और एक्टिविस की बिटनेस है

c: \ windows \ SysWOW64 \ WScript.exe your.vbs



Кто б сомневался ©   (2016-05-20 16:51) [2]

iop © (20.05.16 16: 36) [1]

यह काम करता है ... :(

और यहाँ एक vbs स्क्रिप्ट है जिसमें एक लाइन है:
सेट xmlDoc = CreateObject ("MSXML2.DOMDocument")
या
सेट xmlDoc = createobject ("Microsoft.XMLDOM")

अगर इसे अंदर डाला जाए
IActiveScriptParse.ParseScriptText
पहुँच उल्लंघन देता है।

इसके अलावा, कि विन XP x64 पर, कि विन 10 x64 पर - वही बात।



iop ©   (2016-05-20 17:09) [3]

लेकिन सामान्य क्या जरूरत है आवरण के नीचे से vbs चलाने के लिए और createprocess के माध्यम से नहीं?

या केवल vbs या केवल डेल्फी करते हैं?



Кто б сомневался ©   (2016-05-20 17:09) [4]

Step2 उदाहरण में, यह कोड काम करता है।

http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/activescript.htm

तो कहीं मैंने एडजस्ट किया।

क्या समस्या हो सकती है, ऐसा लगता है कि सब कुछ अभी भी बनाया जा रहा है .. और अन्य vbs कोड काम करता है



Кто б сомневался ©   (2016-05-20 17:13) [5]

हां, एक और बात, यह IActiveScriptParse कोड एक dll में काम करता है, जो फ़ॉर्म का उपयोग नहीं करता है। क्या यह समस्या हो सकती है?



iop ©   (2016-05-20 17:14) [6]

सेट करें objDoc = CreateObject ("MSXML.DOMDocument")
objDoc.Load "d: \ Test.xml"


सेट objDoc = CreateObject ("MSXML.DOMDocument")
objDoc.async = असत्य

अगर objDoc.Load "d: \ Test.xml" तब
....
अन्य
MsgBox ("kyky!")
अगर अंत



iop ©   (2016-05-20 17:17) [7]

मैं स्क्रिप्ट फ़ाइल के एन्कोडिंग की भी जाँच करूँगा



Кто б сомневался ©   (2016-05-20 18:43) [8]

पाया क्या समस्या थी।
कृपया बताएं कि ऐसा क्यों होता है ... मुझे समझ नहीं आया ..

TScriptEngine = class (TInterfacedObject, IActiveScriptSite) समारोह _AddRef: पूर्णांक; stdcall; फ़ंक्शन _Release: पूर्णांक; stdcall; फ़ंक्शन TScriptEngine._AddRef: पूर्णांक; शुरू करना परिणाम: = -1; अंत; फ़ंक्शन TScriptEngine._Release: पूर्णांक; शुरू करना परिणाम: = -1; अंत;

जब fEngine.SetScriptSite (स्व) कहा जाता है;
AddRef चलाएँ।

ParseText को कॉल करते समय, एक और _AddRef निष्पादित किया जाता है
OnEnterScript स्क्रिप्ट से बहुत आगे आता है

और फिर तुरंत TScriptEngine विध्वंसक कहा जाता है

कोई _Release नहीं आया।

इसलिए यह जुड़ा हुआ है, मुझे समझ नहीं आया।
AddRef Addrealese निकाला और यह काम कर गया। विध्वंसक नहीं कहा जाता है।

इसके अलावा, अन्य vbs लिपियों के साथ सब कुछ लिंक गिनती तंत्र के साथ काम करने के लिए इस्तेमाल किया अक्षम (मुझे इसके बिना करना होगा ..)



Кто б сомневался ©   (2016-05-20 19:21) [9]

सामान्य तौर पर, आप ऐसा नहीं कर सकते। यह TInterfacedObject से वारिस करने और अपने स्वयं के फ़ंक्शन को लिखने के लिए समझ में आता है _AddRef: पूर्णांक; stdcall; फ़ंक्शन _Release: पूर्णांक; stdcall;

यदि आपको संदर्भ काउंटर को अक्षम करने की आवश्यकता है, तो आपको Tobject से विरासत में प्राप्त करने की आवश्यकता है और पहले से ही अपना स्वयं का कार्यान्वयन करें
फ़ंक्शन QueryInterface (const IID: TGUID; आउट ओबज): HResult; stdcall;
समारोह _AddRef: पूर्णांक; stdcall;
फ़ंक्शन _Release: पूर्णांक; stdcall;

जो मैंने अभी किया।

लेकिन यह टूबजेक्ट और वहाँ से QuInInterface कॉल GetInterface निकला कुछ शर्तों के तहत वही IInterface (Obj) ._ AddRef होता है (मेरे मामले में, TInrefacedObject.addRef कहा जाता है, और मेरा addRef नहीं है)। और फिर अन्य तरीकों में, TinterfacedObject से _Release भी निष्पादित किया जाता है, और पहले से ही एक विध्वंसक है।

ऐसी बातें ।।



iop ©   (2016-05-20 19:43) [10]

कुछ क्यों नहीं?

यदि इंफ़ोबोज उत्तराधिकारी को एक नियमित टोबजेक्ट की शैली में उपयोग करने की योजना है (स्पष्ट रूप से इसे बाद में हटाने के इरादे से), तो _addRef आपको संदर्भ काउंटर से डरने की अनुमति नहीं देता है।
जब तक वह मर नहीं जाता



Кто б сомневался ©   (2016-05-20 23:08) [11]


> ऑप © (20.05.16 19: 43) [10]
>
> यह असंभव क्यों है?
>
> अगर इंटोबोज वारिस शैली का उपयोग करने की योजना बनाई गई है
> साधारण टोबिज (बाद में स्पष्ट रूप से इसे हटाने के इरादे से), फिर
> _addRef आपको संदर्भ काउंटर से डरने की अनुमति नहीं देता है।
> वह तब तक नहीं मरेगा जब तक वह चुटकी नहीं लेता


तो ठीक है, आप जल्द ही यह मेरा एक ही सवाल होगा - बेतरतीब ढंग से बकवास ए.वी.
मैंने भी ऐसा ही सोचा था, और यह भी tobject शैली में इस्तेमाल किया - और सब कुछ ठीक काम किया जब तक यह मामला नहीं आया .. मेरे पास अब विस्तृत विश्लेषण करने का समय नहीं है, समय सीमाएं हैं:
यदि आपको TInterfacedObject से विरासत में मिला है, तो वहां कुछ शर्तों के तहत RefCount है (मुझे नहीं पता कि ये स्थितियां क्या हैं, शायद विशेषज्ञ समझाएंगे) Tobject - IInterface (Obj) ._ AddRef के माध्यम से विभक्त किया गया है;

function TObject.GetInterface (const IID: TGUID; out Obj): बूलियन; वर InterfaceEntry: PInterfaceEntry; शुरू करना सूचक (ओबज): = नील; InterfaceEntry: = GetInterfaceEntry (IID); अगर InterfaceEntry <> nil है शुरू करना अगर InterfaceEntry ^ .IOffset <> 0 तो शुरू करना पॉइंटर (ओबज): = पॉइंटर (पीबाइट (सेल्फ) + इंटरफेसइंट्री ^ .ऑफ़सेट); यदि पॉइंटर (ओबज) <> नील तो IInterface (Obj) ._ AddRef; <<<<<<<<<< अंत अन्यथा IInterface (Obj): = InvokeImplGetter (Self, InterfaceEntry ^ .ImplGetter); अंत में अगर ObjCastGUID = IID हो सूचक (ओबज): = सूचक (स्व); परिणाम: = सूचक (ओब्ज) <> नील; अंत;

यानी अंत में अगर objCastGUID = IID है तो आमतौर पर निष्पादित किया जाता है। और कुछ दुर्लभ स्थितियों में, जो तीर द्वारा दिखाया गया है उसे निष्पादित किया जाता है।

इसे विधि कहेंगे TInterfacedObject.addref - जो काउंटर को शून्य से एक तक बढ़ाएगा। फिर कुछ तृतीय-पक्ष कोड को COM साइड पर निष्पादित किया जाता है, और फिर डिबगर _Release TInterfacedObject पर एक ब्रेकप्वाइंट दिखाता है। यानी मेरे वर्ग को नहीं, जो कि TInterfacedObject से विरासत में मिला है, अर्थात् TInterfacedObject।
ठीक है, फिर विध्वंसक को वहां से बुलाया जाता है।
अन्य मामलों में (ज्यादातर मामलों में) मेरे Addref और रिलीज़ में कोड निष्पादित होता है।



iop ©   (2016-05-20 23:27) [12]

मैंने भी ऐसा ही सोचा था, और इसे भी टोबिज शैली में इस्तेमाल किया - और सब कुछ ठीक काम किया

पते के साथ सब कुछ ठीक है।
लेकिन विशिष्ट वर्गों के कार्यान्वयन की बस विशेषताएं हैं।

उदा। TXMLDocument

यदि एक लाइव ूनर कंस्ट्रक्टर को दिया जाता है (उदाहरण के लिए, यह डिज़ाइनर के रूप में रीसेट हो जाता है) - व्यवहार ऑब्जेक्ट होगा।

अगर नील कंस्ट्रक्टर के पास एक ओब्यूअर के रूप में आया था, तो इंटरफ़ेस व्यवहार होगा।
और यहां पहले से ही लिंक का पालन करें और मुफ्त कॉल न करें



पन्ने: 1 पूरी शाखा

मंच: "अन्य";
वर्तमान संग्रह: 2017.07.09;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.61 एमबी
समय: 0.018 c
15-1463750462
किसको शक होगा
2016-05-20 16:21
2017.07.09
डेल्फी में IActiveScript (vx = AV में Msxml2.DOMDocument बनाना)


2-1445006653
AndrG
2015-10-16 17:44
2017.07.09
निरंतर अभिव्यक्ति सुव्यवस्थित सीमा का उल्लंघन करती है


2-1444423211
Mihapych
2015-10-09 23:40
2017.07.09
संकलन त्रुटि


2-1445034926
Shkolnik
2015-10-17 01:35
2017.07.09
प्रोग्रामिंग का काम


6-1283385235
Gu
2010-09-02 03:53
2017.07.09
आईपी ​​द्वारा क्षेत्र का निर्धारण





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский