.net dll vbscript dllregistration

Acceda a una DLL.NET personalizada en VBScript



dllregistration (5)

Escribí una DLL en .NET y quiero acceder a ella en VBScript. No quiero agregarlo al directorio de ensamblaje.

¿Hay alguna manera de señalar también la DLL y crear una instancia de la misma?


No directamente. Necesitará un Contenedor COM invocable en cualquier biblioteca .NET a la que llame desde COM (y, por lo tanto, VBScript). Por lo tanto, debe crear directamente una CCW a la DLL o puede crear una CCW para una DLL proxy que proporciona métodos genéricos para cargar una DLL .NET y proporcionar métodos que llamen a los métodos reales en el componente y devuelvan el resultado. Realmente no es limpio en absoluto. Entonces, en general, la respuesta es no.


La respuesta de Huseyint fue sobre el dinero, sin embargo, quería agregarle un poco. Aquí hay un código de muestra que utilicé para este mismo problema, quizás pueda acelerarlo ...

// 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")

Había incluido un método IsAlive en el dll ...

Public Function IsAlive() As Boolean Return True End Function

... y podría verificar que se registró correctamente usando la sintaxis:

//check if dll is available to your code msgbox "cbUtil is alive: " & cbUtil.IsAlive

Espero que esto ayude a alguien...


En caso de que alguien necesite depurar / ingresar al dll de .Net que se llama solo desde VBScript:

  1. En la pantalla de configuración de depuración del proyecto .Net dll, configure el "inicio del programa externo" navegando al programa wscript.exe (ubicado en C: / WINDOWS / system32 / wscript.exe).

  2. En los "Argumentos de la línea de comando", establezca el nombre del archivo y la ubicación de la ruta del archivo de VBScript (C: / Test / myTest.vbs). Asegúrese de que el archivo vbs y el archivo dll estén en la misma ubicación.

  3. Finalmente, en el código fuente del proyecto .Net, el código fuente acaba de establecer el punto de interrupción y presionar "iniciar depuración"


Puede registrar esa .NET dll con la utilidad regasm especificando /codebase parameter. No se recomienda utilizar este parámetro con ensamblajes sin signo pero funciona cuando no puede colocar su ensamblaje en GAC.

regasm your.dll /codebase

Tenga en cuenta que no debe cambiar la ruta de su .dll después de esta operación ya que inserta esta ruta en el registro de Windows.


Simplemente tuve que hacer esto yo mismo, mis hallazgos fueron:

Hacer los tipos visibles para COM:

  1. Asegúrese de que su clase sea pública, no estática y tenga un constructor predeterminado público, es decir, no argumentos.
  2. Asegúrese de que su método sea público, no estático.
  3. Asegúrese de tener el siguiente conjunto en su conjunto, generalmente en AssemblyInfo.cs

    [assembly: ComVisible(true)]

  4. Después de compilar su DLL, desde la línea de comandos del SDK, ejecute:

    regasm yourdll.dll

    Esto debería responder:

    Tipos registrados con éxito

    Si lo consigues

    RegAsm: advertencia RA0000: No se registraron tipos

    entonces necesita establecer ComVisible o no tener tipos públicos, no estáticos.

De PowerShell

$a = New-Object -comobject Your.Utils.Logging $a.WriteError2("Application", "hello",1,1)

Desde vbs

Set logger = CreateObject("Your.Utils.Logging") logger.WriteError2 "Application", "hello from vbs",1,1