当前位置:  开发笔记 > 编程语言 > 正文

在VBScript中访问自定义.NET DLL

如何解决《在VBScript中访问自定义.NETDLL》经验,为你挑选了3个好方法。

我在.NET中编写了一个DLL,我想在VBScript中访问它.我不想将它添加到汇编目录中.

有没有办法指出DLL并创建它的实例?



1> foolshat..:

我自己必须这样做,我的发现是:

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



2> Dscoduc..:

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

希望这有助于某人......



3> huseyint..:

您可以通过指定参数向regasm实用程序注册该.NET dll /codebase.不鼓励此参数与未签名的程序集一起使用,但是当您无法将程序集放入GAC时它会起作用.

regasm your.dll /codebase

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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有