Я написал DLL в .NET и хочу получить к ней доступ в VBScript. Я не хочу добавлять его в каталог сборки.
Есть ли способ указать DLL и создать ее экземпляр?
Я написал DLL в .NET и хочу получить к ней доступ в VBScript. Я не хочу добавлять его в каталог сборки.
Есть ли способ указать DLL и создать ее экземпляр?
Вы можете зарегистрировать эту .NET dll с помощью утилиты regasm, указав параметр /codebase
. Этот параметр не рекомендуется использовать с неподписанными сборками, но он работает, когда вы не можете поместить свою сборку в GAC.
regasm your.dll /codebase
Обратите внимание, что вы не должны изменять путь к вашей .dll после этой операции, так как он вставляет этот путь в реестр Windows.
Я просто должен был сделать это сам, мои выводы были:
Делаем типы видимыми для COM:
Убедитесь, что у вас есть следующий набор в вашей сборке - обычно в AssemblyInfo.cs
[assembly: ComVisible(true)]
regasm yourdll.dll
#P5# <цитата> #P6# цитата> #P7# <цитата> #P8# цитата> #P9#Из 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
ответ хусейнта был о деньгах, однако я хотел немного добавить к нему. Вот пример кода, который я использовал для этой самой проблемы, возможно, это ускорит вас...
// 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
Надеюсь, это поможет кому-то...
Если кому-то нужно отлаживать/входить в .Net dll, который вызывается только из VBScript:
На экране настройки отладки проекта .Net dll установите «запустить внешнюю программу», перейдя к программе wscript.exe (расположенной в C:\WINDOWS\system32\wscript.exe).
В «Аргументах командной строки» задайте имя файла и путь к файлу VBScript (C:\Test\myTest.vbs). Убедитесь, что файл vbs и файл dll находятся в одном месте.
Наконец, в исходном коде DLL проекта .Net просто установите точку останова и нажмите «начать отладку».
Не напрямую. Вам понадобится COM Callable Wrapper для любой библиотеки .NET, которую вы будете вызывать из COM (и, следовательно, VBScript). Таким образом, вы должны либо напрямую создать CCW для DLL, либо вы можете создать CCW для прокси-DLL, который предоставляет общие методы для загрузки .NET DLL и предоставляет вам методы, которые вызывают фактические методы компонента и возвращают результат. Это действительно совсем не чисто. Так что в целом ответ - нет.