我在.NET中编写了一个DLL,我想在VBScript中访问它。我不想将它添加到汇编目录中。
有没有办法指出DLL并创建它的实例?
答案 0 :(得分:12)
我必须自己做,我的发现是:
使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
答案 1 :(得分:6)
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
希望这有助于某人...
答案 2 :(得分:5)
您可以通过指定/codebase
参数向{d}注册该.NET dll。不鼓励此参数与未签名的程序集一起使用,但是当您无法将程序集放入GAC时,它会起作用。
regasm your.dll /codebase
请注意,在此操作之后,您不应更改.dll的路径,因为它会将此路径插入Windows注册表。
答案 3 :(得分:4)
如果有人需要调试/步入仅从VBScript调用的.Net dll:
在.Net dll项目调试设置屏幕上,通过浏览到wscript.exe程序(位于C:\ WINDOWS \ system32 \ wscript.exe)设置“启动外部程序”。
在“命令行参数”中,设置VBScript文件的文件名和路径位置(C:\ Test \ myTest.vbs)。确保vbs文件和dll文件位于同一位置。
最后,在.Net项目DLL源代码中设置断点并点击“启动调试”
答案 4 :(得分:1)
不直接。你需要一个COM Callable Wrapper到你将从COM调用的任何.NET库(因此,VBScript)。因此,您应该直接为DLL创建CCW,或者您可以为代理DLL创建CCW,它提供加载.NET DLL的通用方法,并为您调用组件上的实际方法并返回结果。它真的不干净。所以,一般来说,答案是否定的。