Доступ a custom.NET DLL в VBScript
Я написал DLL в .NET, и я хочу получить к нему доступ в VBScript. Я не хочу добавлять его в каталог сборки.
есть ли способ указать также DLL и создать его экземпляр?
5 ответов
Я просто должен был сделать это сам, мои выводы были:
сделать типы видимыми для 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
ответ хусейинта был на деньги, однако, я хотел добавить к нему немного. Вот пример кода, который я использовал для этой самой проблемы, возможно, это может ускорить вас...
// 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:
на экране настройки отладки проекта dll .Net установите "запустить внешнюю программу", перейдя к wscript.exe программа (находится в C:\WINDOWS\system32\wscript - ... исполняемый.)
в "аргументах командной строки" задайте имя файла и путь к файлу VBScript (C:\Test\myTest - ... vbs). Убедитесь, что файл vbs и dll-файл находятся в одном и том же местоположение.
наконец, в исходном коде DLL проекта .Net просто установите точку останова и нажмите "начать отладку"
не напрямую. Вам понадобится вызываемая оболочка COM для любой библиотеки .NET, которую вы будете вызывать из COM (и, следовательно, VBScript). Поэтому вы должны либо непосредственно создать CCW для DLL, либо вы можете создать CCW для прокси-библиотеки DLL, которая предоставляет общие методы для загрузки .NET DLL и предоставляет методы для вас, которые вызывают фактические методы на компоненте и возвращают результат. Она совсем не чистая. Так что, в общем, ответ-нет.