Я написал DLL в .NET и хочу получить к ней доступ в VBScript. Я не хочу добавлять его в каталог сборки.Доступ к пользовательской .NET DLL в VBScript
Есть ли способ указать также DLL и создать экземпляр?
Я написал DLL в .NET и хочу получить к ней доступ в VBScript. Я не хочу добавлять его в каталог сборки.Доступ к пользовательской .NET DLL в VBScript
Есть ли способ указать также DLL и создать экземпляр?
Вы можете зарегистрировать эту DLL .NET с regasm utility, указав параметр /codebase
. Этот параметр не рекомендуется использовать с неподписанными сборками, но он работает, когда вы не можете поместить свою сборку в GAC.
regasm your.dll /codebase
Пожалуйста, обратите внимание, что вы не должны изменить путь вашего .dll после этой операции, так как он вставляет этот путь в реестре Windows.
Не напрямую. Вам понадобится COM-Callable Wrapper для любой библиотеки .NET, которую вы вызовете из COM (и, следовательно, VBScript). Таким образом, вы должны либо создать CCW для DLL, либо создать CCW для прокси-библиотеки DLL, которая предоставляет общие методы для загрузки DLL-библиотеки .NET и предоставляет методы для вас, которые вызывают фактические методы компонента и возвращают результат. Это действительно не чисто. Итак, в общем, ответ - нет.
Ответ 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")
я включил IsAlive метод в библиотеке DLL ...
Public Function IsAlive() As Boolean
Return True
End Function
... и может проверить, что он правильно зарегистрирован с помощью синтаксиса:
//check if dll is available to your code
msgbox "cbUtil is alive: " & cbUtil.IsAlive
Надеется, что это помогает кто-то ...
I просто должен был сделать это сам, мои выводы были:
Создание типов видна COM:
Убедитесь, что на сборке установлено следующее: обычно в AssemblyInfo.CS
[assembly: ComVisible(true)]
После создания библиотеки DLL из SDK командной строки запуска:
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 .Net, который вызывается только из VBScript:
На экране установки отладки проекта .Net dll установите «запустить внешнюю программу», перейдя в программу wscript.exe (находящуюся в C: \ WINDOWS \ system32 \ wscript.exe).
В «Аргументах командной строки» задайте имя файла и путь к файлу VBScript (C: \ Test \ myTest.vbs). Убедитесь, что файл vbs и dll находятся в одном месте.
Наконец, в проекте исходного кода DLL .Net просто установить точку останова и нажмите «начать отладку»
Как вы UNREGISTER раз вы это делаете? – 2008-12-05 21:47:31
regasm your.dll/unregister – huseyint 2008-12-05 22:16:54