我写了一DLL。净并且我想要访问它在VBScript。我不想将它添加到大会目录。

有没有一种方法来点太DLL和创建的一个实例?

有帮助吗?

解决方案

可以注册 regasm效用通过该.NET DLL指定/codebase参数。该参数不鼓励使用未签名的组件使用,但是当你不能把你组装成GAC它的工作原理。

regasm your.dll /codebase

请注意,由于它插入这条路径到Windows注册表,你不应该这样操作后更改您的.dll的路径。

其他提示

我只是不得不这样做我自己,我的结论是:

制作类型可见COM:

  1. 确保你的类是公共的、非静态的和具有公共默认即构造不论点。
  2. 确保你的方法是公开的,非静态的。
  3. 确保你已经下定你会--通常在程序集信息.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)

从js

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

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

希望这可以帮助别人...

在情况需要有人去调试/步入。净dll这就是所谓的从VBScript:

  1. 上。净dll项目调试设置屏幕,设置"开始的外部节目"通过浏览wscript.exe 程序(位于C:\WINDOWS\system32\wscript.exe).

  2. "命令行参数"中,设置文件的名称和位置的路径VBScript文件(文件C: est\myTest.vbs).确保js文件和dll文件都是在相同的位置。

  3. 最后,在。净项目DLL源代码刚刚成立的突破点,并点击"开始调试"

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top