मैं pywin32 का उपयोग कर रहा हूं और COM ऑब्जेक्ट बनाने के लिए डिस्पैच फ़ंक्शन को कॉल कर रहा हूं, लेकिन इसका मतलब है कि जब भी मैं फ़ंक्शन को कॉल करता हूं तो एप्लिकेशन का एक नया उदाहरण बनाया जाता है (इस मामले में पीटीवी विसिम)। क्या इसके बजाय, पहले से मौजूद Vissim एप्लिकेशन को अटैच करना संभव है? यह विकास को गति देगा, क्योंकि जब भी मैं परीक्षण चलाता हूं, तो मुझे हर बार आवेदन शुरू होने की प्रतीक्षा नहीं करनी पड़ेगी।

यह मेरा मौजूदा प्रासंगिक कोड है:

import win32com.client as com
Vissim = com.Dispatch("Vissim.Vissim.540")
1
snibbets 18 अगस्त 2017, 04:06
1
win32com.client.GetObject का उपयोग करना संभव हो सकता है लेकिन यह ऐप पर निर्भर करता है। इसे इसका समर्थन करना चाहिए। उदाहरण के लिए एक्सेल के साथ: timgolden.me.uk /पायथन/win32_how_do_i/…
 – 
Simon Mourier
18 अगस्त 2017, 09:33

2 जवाब

विशेष रूप से PTV Vissim के लिए, Vissim को एक्सटेंशन -ऑटोमेशन (उदाहरण के लिए: vissim100.exe -automation) के साथ शुरू करने का एक विकल्प है। यदि आप PTV Vissim को एक्सटेंशन -ऑटोमेशन के साथ प्रारंभ करते हैं, तो यह PTV Vissim को COM सर्वर के रूप में COM स्क्रिप्ट के लिए ऑटोमेशन मोड में प्रदान करता है जो बाद में प्रारंभ होते हैं।

PTV Vissim सहायता का अध्याय "कमांड प्रॉम्प्ट के माध्यम से PTV Vissim प्रारंभ करना" देखें।

0
Jochen Lohmiller 11 जून 2018, 08:49

सामान्य तौर पर, आप COM सर्वर के रूप में मौजूदा Vissim इंस्टेंस के साथ नहीं "संलग्न" कर सकते हैं। प्रत्येक क्लाइंट कनेक्शन को एक स्वतंत्र विसिम इंस्टेंस द्वारा सर्वोत्तम रूप से बैक-अप किया जाना चाहिए।

कहा जा रहा है कि, अपने लक्ष्य को पूरा करना अभी भी संभव है, अर्थात - Vissim.exe को लॉन्च करने के लिए कमांड लाइन स्विच "-automation" का उपयोग करें, और Vissim.exe चलाना एक ऑटोमेशन सर्वर के रूप में कार्य करेगा। जैसा आपने चाहा।

--

हूड के नीचे क्या है?

सच तो यह है कि, Vissim.exe के स्टार्टअप कोड में, CoRegisterClassObject(CLSID, pUnk, dwClsContext, फ़्लैग्स, &dwRegister) को डिफ़ॉल्ट रूप से फ़्लैग के साथ बुलाया जाता है = REGCLS_SINGLEUSE

REGCLS_SINGLEUSE का सीधा सा अर्थ है, बाद क्लाइंट एप्लिकेशन को Vissim क्लास ऑब्जेक्ट से कनेक्ट किया गया है, जैसा कि Vissim.exe चल रहे Vissim क्लास ऑब्जेक्ट द्वारा होस्ट किया गया है। क्लास फ़ैक्टरी को सार्वजनिक दृश्य से हटा दिया गया है (यानी, अब OS सिस्टम की क्लास टेबल में नहीं)। इसका मतलब है, एक नए क्लाइंट कनेक्शन को क्लास फैक्ट्री प्राप्त करने के लिए एक नया Vissim इंस्टेंस लॉन्च करना होगा, इसलिए एक नए Vissim इंस्टेंस का निर्माण क्रम में है।

हालांकि, यदि आप Vissim.exe इंस्टेंस लॉन्च करते समय कमांड लाइन स्विच "-automation" का उपयोग करते हैं, तो Vissim.exe इसके बजाय क्लास फ़ैक्टरी को पंजीकृत करने के लिए REGCLS_MULTIPLEUSE फ़्लैग का उपयोग करेगा। यह बाद में एक ही चल रहे Vissim.exe उदाहरण के लिए एकाधिक क्लाइंट कनेक्शन की अनुमति देता है।

मेरे पास इस मामले पर अधिक विस्तृत ब्लॉग है और अन्य प्रासंगिक मुद्दे यहां। आप उन्हें blog.wupingxin.net पर देखना चाहेंगे।

0
Wuping Xin 11 जून 2018, 20:38