访问VBScript中的自定义.NET DLL
通过指定/codebase
参数,您可以注册该.NET dll与regasm utility。不鼓励该参数与未签名的程序集一起使用,但当您不能将程序集放入GAC时,该参数可用。
regasm your.dll /codebase
请注意,在此操作之后,您不应该更改.dll的路径,因为它会将此路径插入到Windows注册表中。
不是直接。你需要一个COM Callable Wrapper来从COM调用任何.NET库(因此VBScript)。因此,您应该直接创建一个CCW到DLL,或者您可以为代理DLL创建一个CCW,它提供加载.NET DLL的通用方法,并为您提供调用组件上的实际方法并返回结果的方法。它真的不干净。所以,一般来说,答案是否定的。
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
希望这可以帮助别人......
我只是有这个做我自己,我的研究结果是:
使类型对COM可见:
- 确保你的类是公共的,非静态的和具有公共默认构造函数即没有参数。
- 确保您的方法是公开的,非静态的。
-
确保您在装配体上有以下设置 - 通常在AssemblyInfo中。CS
[assembly: ComVisible(true)]
-
建立你的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
万一有人需要调试/步到.NET的DLL这是一个从只有VBScript中称为:
在.net dll项目调试设置屏幕上,通过浏览到wscript.exe程序(位于C:\ WINDOWS \ system32 \ wscript.exe)中设置“启动外部程序”。
在“命令行参数”上,设置VBScript文件(C:\ Test \ myTest.vbs)的文件名和路径位置。确保vbs文件和dll文件位于相同的位置。
最后,在.NET项目DLL源代码,只需设置断点并点击“开始调试”
你怎么注销,一旦你做到了吗? – 2008-12-05 21:47:31
regasm your.dll/unregister – huseyint 2008-12-05 22:16:54