访问一个自定义。净DLL在VBScript
-
19-08-2019 - |
题
我写了一DLL。净并且我想要访问它在VBScript。我不想将它添加到大会目录。
有没有一种方法来点太DLL和创建的一个实例?
解决方案
可以注册 regasm效用通过该.NET DLL指定/codebase
参数。该参数不鼓励使用未签名的组件使用,但是当你不能把你组装成GAC它的工作原理。
regasm your.dll /codebase
请注意,由于它插入这条路径到Windows注册表,你不应该这样操作后更改您的.dll的路径。
其他提示
我只是不得不这样做我自己,我的结论是:
制作类型可见COM:
- 确保你的类是公共的、非静态的和具有公共默认即构造不论点。
- 确保你的方法是公开的,非静态的。
确保你已经下定你会--通常在程序集信息.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)
从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:
上。净dll项目调试设置屏幕,设置"开始的外部节目"通过浏览wscript.exe 程序(位于C:\WINDOWS\system32\wscript.exe).
"命令行参数"中,设置文件的名称和位置的路径VBScript文件(文件C: est\myTest.vbs).确保js文件和dll文件都是在相同的位置。
最后,在。净项目DLL源代码刚刚成立的突破点,并点击"开始调试"
不直接。你需要一个COM可调用包装到你会从COM(因此,VBScript)的调用任何.NET库。因此,你应该直接创建一个CCW的DLL,或者你可以创建一个代理DLL提供通用的方法来加载一个.NET的DLL,并为您调用组件的实际方法,并返回结果方法CCW。这真是不干净的。所以,一般来说,答案是否定的。