में एक कस्टम .NET DLL तक पहुंचें मैंने .NET में एक DLL लिखा था और मैं इसे VBScript में एक्सेस करना चाहता हूं। मैं इसे असेंबली निर्देशिका में जोड़ना नहीं चाहता हूं।वीबीस्क्रिप्ट
क्या डीएलएल को इंगित करने और इसका एक उदाहरण बनाने का कोई तरीका है?
में एक कस्टम .NET DLL तक पहुंचें मैंने .NET में एक DLL लिखा था और मैं इसे VBScript में एक्सेस करना चाहता हूं। मैं इसे असेंबली निर्देशिका में जोड़ना नहीं चाहता हूं।वीबीस्क्रिप्ट
क्या डीएलएल को इंगित करने और इसका एक उदाहरण बनाने का कोई तरीका है?
/codebase
पैरामीटर निर्दिष्ट करके आप regasm utility के साथ .NET dll पंजीकृत कर सकते हैं। इस पैरामीटर को हस्ताक्षरित असेंबली के साथ उपयोग करने के लिए प्रोत्साहित नहीं किया जाता है, लेकिन यह तब काम करता है जब आप अपनी असेंबली को जीएसी में नहीं डाल सकते हैं।
regasm your.dll /codebase
कृपया ध्यान दें कि आप इस ऑपरेशन के बाद अपने .dll के पथ परिवर्तन नहीं होना चाहिए, क्योंकि यह Windows रजिस्ट्री में इस पथ सम्मिलित करता है।
सीधे नहीं। आपको किसी भी .NET लाइब्रेरी में COM COM (और इसलिए, VBScript) से कॉल करने के लिए एक COM Callable Wrapper की आवश्यकता होगी। इसलिए, आपको या तो सीधे डीएलएल में सीसीडब्ल्यू बनाना चाहिए या आप प्रॉक्सी डीएलएल के लिए सीसीडब्ल्यू बना सकते हैं जो .NET DLL को लोड करने के लिए जेनेरिक तरीके प्रदान करता है और आपके लिए विधियों को प्रदान करता है जो घटक पर वास्तविक विधियों को कॉल करता है और परिणाम देता है। यह वास्तव में बिल्कुल साफ नहीं है। तो, सामान्य रूप से, जवाब नहीं है।
huseyint का जवाब पैसे पर था, हालांकि, मैं इसे थोड़ा जोड़ना चाहता था। यहां कुछ नमूना कोड मैं इस बहुत जारी करने के लिए प्रयोग किया जाता है, शायद यह आप के साथ लाने के कर सकते हैं ...
// bind a variabe to WScript.Shell
Set WshShell = CreateObject("WScript.Shell")
// define the path to the regasm.exe file
RegAsmPath = "c:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe"
// register the dll
WshShell.run "cmd /c " & RegAsmPath & " c:\temp\cbsecurity.dll /codebase /nologo /s", 0, True
// bind a variable to the dll
Set cbUtil = CreateObject("CBSecurity.Utilities")
मैं dll में एक IsAlive विधि ...
Public Function IsAlive() As Boolean
Return True
End Function
को शामिल किया था ... और जांच कर सकता है कि इसे सही ढंग से सिंटैक्स का उपयोग पंजीकरण दिनांक:
//check if dll is available to your code
msgbox "cbUtil is alive: " & cbUtil.IsAlive
आशा इस कोई मदद करता है ...
मैं सिर्फ इस अपने आप को करना था, मेरे निष्कर्ष थे:
प्रकार कॉम को दिखाई बनाना:
सुनिश्चित करें कि आपके असेंबली पर निम्नलिखित सेट है - आमतौर पर AssemblyInfo में।सीएस
[assembly: ComVisible(true)]
एसडीके कमांड लाइन चलाने से, अपने DLL के निर्माण के बाद:
regasm yourdll.dll
यह जवाब देना चाहिए: सफलतापूर्वक पंजीकृत
आप
मिलता हैप्रकार
RegAsm: चेतावनी RA0000: नहीं प्रकार
दर्ज किए गए थे तो आप
ComVisible
सेट करना होगा या कोई सार्वजनिक, गैर स्थिर प्रकार हैं।
PowerShell
$a = New-Object -comobject Your.Utils.Logging
$a.WriteError2("Application", "hello",1,1)
से vbs
Set logger = CreateObject("Your.Utils.Logging")
logger.WriteError2 "Application", "hello from vbs",1,1
मामले किसी में से डिबग करने के लिए की जरूरत है/कदम दर में नेट dll कि केवल VBScript से कहा जाता है:
.NET dll प्रोजेक्ट डीबग सेटअप स्क्रीन पर, wscript.exe प्रोग्राम (C: \ WINDOWS \ system32 \ wscript.exe में स्थित) पर ब्राउज़ करके "बाहरी प्रोग्राम प्रारंभ करें" सेट करें।
"कमांड लाइन तर्क" पर, VBScript फ़ाइल (सी: \ टेस्ट \ myTest.vbs) का फ़ाइल नाम और पथ स्थान सेट करें। सुनिश्चित करें कि vbs फ़ाइल और dll फ़ाइल एक ही स्थान पर हैं।
अंत में, नेट परियोजना DLL स्रोत कोड में सिर्फ तोड़ बिंदु निर्धारित और "शुरू डिबग"
मारा एक बार आप यह कर आप कैसे पंजीकरण रद्द कर सकता हूँ? –
regasm your.dll/unregister – huseyint