Escribí una DLL en .NET y quiero acceder a ella en VBScript. No quiero agregarlo al directorio de ensamblaje.Acceda a una .NET DLL personalizada en VBScript
¿Hay alguna manera de señalar también la DLL y crear una instancia de la misma?
Escribí una DLL en .NET y quiero acceder a ella en VBScript. No quiero agregarlo al directorio de ensamblaje.Acceda a una .NET DLL personalizada en VBScript
¿Hay alguna manera de señalar también la DLL y crear una instancia de la misma?
Puede registrar esa .NET dll con regasm utility especificando el parámetro /codebase
. 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 se debe cambiar el camino de su .dll después de esta operación, ya que inserta este camino en el registro de Windows.
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 más. Aquí algunos ejemplos de código que he usado para este mismo tema, tal vez puede acelerar a lo largo de usted ...
// 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")
yo había incluido un método IsAlive en la DLL ...
Public Function IsAlive() As Boolean
Return True
End Function
... y podría comprobar que se han registrado correctamente utilizando la sintaxis:
//check if dll is available to your code
msgbox "cbUtil is alive: " & cbUtil.IsAlive
Espero que esto ayude a alguien ...
I Sólo tenía que hacer esto por mí mismo, mis resultados fueron los siguientes:
Haciendo tipos visibles para COM:
Asegúrese de tener el siguiente conjunto en su conjunto, generalmente en AssemblyInfo.cs
[assembly: ComVisible(true)]
Después de construir el archivo DLL, desde SDK línea de comando de marcha:
regasm yourdll.dll
Esto debe responder:
Tipos registraron correctamente
Si obtiene
RegAsm: RA0000 advertencia: No hay tipos se registraron
entonces usted necesita para establecer ComVisible
o no tienen públicos, los tipos 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
En caso de que alguien tiene que depurar/paso en la DLL .Net que se llama solamente de VBScript:
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).
En los "Argumentos de la línea de comandos", establezca el nombre del archivo y la ubicación de la ruta del archivo VBScript (C: \ Test \ myTest.vbs). Asegúrese de que el archivo vbs y el archivo dll estén en la misma ubicación.
Por último, en el código fuente del proyecto DLL .Net acaba de establecer el punto de equilibrio y golpear la "depuración comenzar"
¿Cómo anular el registro una vez que lo haces? –
regasm your.dll/unregister – huseyint