【问题标题】:Access a custom .NET DLL in VBScript在 VBScript 中访问自定义 .NET DLL
【发布时间】:2008-12-05 21:20:31
【问题描述】:

我在 .NET 中编写了一个 DLL,我想在 VBScript 中访问它。我不想将它添加到程序集目录中。

有没有办法也指向 DLL 并创建它的实例?

【问题讨论】:

    标签: .net dll vbscript dllregistration


    【解决方案1】:

    我只需要自己做,我的发现是:

    使类型对 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 
    

    【讨论】:

    • 很好的答案,您包含了每个步骤。非常感谢。
    • 谢谢,帮了大忙。第 3 步是我错过的那一步!
    • @foolshat .. 这是 Server.CreateObject 还是 CreateObject
    【解决方案2】:

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

    我在 dll 中包含了一个 IsAlive 方法...

    Public Function IsAlive() As Boolean
        Return True
    End Function
    

    ...并且可以使用以下语法检查它是否正确注册:

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

    希望这对某人有所帮助...

    【讨论】:

      【解决方案3】:

      您可以通过指定/codebase 参数来使用regasm utility 注册该.NET dll。不鼓励将此参数与未签名的程序集一起使用,但当您无法将程序集放入 GAC 时它可以工作。

      regasm your.dll /codebase
      

      请注意,此操作后您不应更改 .dll 的路径,因为它会将此路径插入到 Windows 注册表中。

      【讨论】:

      • 注销后如何注销?
      【解决方案4】:

      如果有人需要调试/单步执行仅从 VBScript 调用的 .Net dll:

      1. 在 .Net dll 项目调试设置屏幕上,通过浏览到 wscript.exe 程序(位于 C:\WINDOWS\system32\wscript.exe)设置“启动外部程序”。

      2. 在“命令行参数”中,设置 VBScript 文件的文件名和路径位置 (C:\Test\myTest.vbs)。确保 vbs 文件和 dll 文件在同一位置。

      3. 最后,在 .Net 项目 DLL 源代码中只需设置断点并点击“开始调试”

      【讨论】:

        【解决方案5】:

        不直接。您将需要一个 COM 可调用包装器来连接您将从 COM(以及因此 VBScript)调用的任何 .NET 库。因此,您应该直接为 DLL 创建一个 CCW,或者您可以为代理 DLL 创建一个 CCW,该代理 DLL 提供了加载 .NET DLL 的通用方法,并为您提供了调用组件上的实际方法并返回结果的方法。真的一点都不干净。所以,总的来说,答案是否定的。

        【讨论】:

          猜你喜欢
          • 2016-12-24
          • 2011-10-28
          • 2015-09-24
          • 2012-05-15
          • 1970-01-01
          • 1970-01-01
          • 2018-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多