2008-12-05 112 views

回答

5

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

regasm your.dll /codebase 

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

+0

你怎么注销,一旦你做到了吗? – 2008-12-05 21:47:31

+1

regasm your.dll/unregister – huseyint 2008-12-05 22:16:54

1

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

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 

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

12

我只是有这个做我自己,我的研究结果是:

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

万一有人需要调试/步到.NET的DLL这是一个从只有VBScript中称为:

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

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

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