Frage

schrieb ich eine DLL in .NET und ich möchte es in VBScript zuzugreifen. Ich will nicht, um es in die Montage Verzeichnis hinzuzufügen.

Gibt es eine Möglichkeit zu dem DLL-zu-Punkt und eine Instanz davon erstellen?

War es hilfreich?

Lösung

Sie können den .NET-DLL registrieren regasm Dienstprogramm von Spezifizieren /codebase Parameter. Dieser Parameter wird nicht mit unsigned Baugruppen verwenden empfohlen, aber es funktioniert, wenn Sie nicht Ihre Assembly in GAC setzen können.

regasm your.dll /codebase

Bitte beachten Sie, dass Sie nicht Ihre DLL-Pfad nach dieser Operation ändern sollten, da es diesen Pfad in die Windows-Registrierung einfügt.

Andere Tipps

Ich hatte gerade dies selbst zu tun, meine Ergebnisse waren:

Typen für COM sichtbar zu machen:

  1. Stellen Sie sicher, Ihre Klasse ist öffentlich, nicht statisch und hat einen öffentlichen Standardkonstruktor das heißt keine Argumente.
  2. Stellen Sie sicher, Ihre Methode ist öffentlich, nicht statisch.
  3. Stellen Sie sicher, Sie folgende Einstellungen auf die Assembly haben - in der Regel in AssemblyInfo.cs

    [assembly: ComVisible(true)]
    
  4. Nach dem DLL Aufbau von SDK-Befehlszeile:

    regasm yourdll.dll
    

    Dies sollte antworten:

      

    Typen erfolgreich registriert

    Wenn Sie erhalten

      

    RegAsm: Warnung RA0000: Keine Arten wurden registriert

    , dann müssen Sie ComVisible setzen oder haben keine öffentlichen, nicht-statischen Typen.

Von Powershell

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

Von vbs

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

huseyint Antwort war auf das Geld, aber ich ein wenig, um es hinzuzufügen wollte. Hier einige Beispiel-Code, den ich für dieses sehr Problem verwendet, vielleicht kann es Ihnen die Geschwindigkeit entlang ...

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

Ich hatte eine IsAlive-Methode in der DLL enthält ...

Public Function IsAlive() As Boolean
    Return True
End Function

... und könnte prüfen, ob sie korrekt mit der Syntax registriert:

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

Hope this jemand hilft ...

Für den Fall, muss jemand debuggen / step-in den .NET-DLL, die von VBScript aufgerufen werden nur:

  1. Auf der .NET-DLL-Projekt Debug-Setup-Bildschirm, stellen Sie den "Start externes Programm" von zum wscript.exe Programm durchsuchen. (Befindet sich im Verzeichnis C: \ WINDOWS \ system32 \ wscript.exe)

  2. Auf den "Befehlszeilenargumenten", stellen Sie die Dateinamen und den Pfad zum Speicherort der VBScript-Datei (C: \ Test \ myTest.vbs). Stellen Sie sicher, dass die vbs-Datei und DLL-Datei in der gleichen Position ist.

  3. Schließlich wird in der Code-DLL Quelle .NET-Projekt nur den Bruchpunkt gesetzt und drücken Sie die "start debug"

Nicht direkt. Hier finden Sie eine COM Callable Wrapper zu jeder .NET-Bibliothek benötigen Sie von COM Aufruf werden (und somit VBScript). Daher sollten Sie entweder direkt ein CCW mit dem DLL erstellen oder Sie können einen CCW für einen Proxy-DLL erstellen, die generische Methoden bietet eine .NET-DLL und bieten Methoden für Sie zu laden, die die eigentlichen Methoden auf der Komponente aufrufen und das Ergebnis zurück. Es ist wirklich überhaupt nicht sauber. Also, in der Regel die Antwort ist nein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top