2008-12-05 2 views

ответ

5

Вы можете зарегистрировать эту DLL .NET с regasm utility, указав параметр /codebase. Этот параметр не рекомендуется использовать с неподписанными сборками, но он работает, когда вы не можете поместить свою сборку в GAC.

regasm your.dll /codebase 

Пожалуйста, обратите внимание, что вы не должны изменить путь вашего .dll после этой операции, так как он вставляет этот путь в реестре Windows.

+0

Как вы UNREGISTER раз вы это делаете? – 2008-12-05 21:47:31

+1

regasm your.dll/unregister – huseyint 2008-12-05 22:16:54

1

Не напрямую. Вам понадобится COM-Callable Wrapper для любой библиотеки .NET, которую вы вызовете из COM (и, следовательно, VBScript). Таким образом, вы должны либо создать CCW для DLL, либо создать CCW для прокси-библиотеки DLL, которая предоставляет общие методы для загрузки DLL-библиотеки .NET и предоставляет методы для вас, которые вызывают фактические методы компонента и возвращают результат. Это действительно не чисто. Итак, в общем, ответ - нет.

6

Ответ 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 

Надеется, что это помогает кто-то ...

12

I просто должен был сделать это сам, мои выводы были:

Создание типов видна COM:

  1. Убедитесь, что ваш класс является открытым, не статична и имеет конструктор по умолчанию, то есть не аргументы.
  2. Убедитесь, что ваш метод является открытым, нестационарным.
  3. Убедитесь, что на сборке установлено следующее: обычно в AssemblyInfo.CS

    [assembly: ComVisible(true)] 
    
  4. После создания библиотеки 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 
4

В случае, если кто нуждается в отладке/шаг-в DLL .Net, который вызывается только из VBScript:

  1. На экране установки отладки проекта .Net dll установите «запустить внешнюю программу», перейдя в программу wscript.exe (находящуюся в C: \ WINDOWS \ system32 \ wscript.exe).

  2. В «Аргументах командной строки» задайте имя файла и путь к файлу VBScript (C: \ Test \ myTest.vbs). Убедитесь, что файл vbs и dll находятся в одном месте.

  3. Наконец, в проекте исходного кода DLL .Net просто установить точку останова и нажмите «начать отладку»

Смежные вопросы