【问题标题】:Using DLLs in VBScript在 VBScript 中使用 DLL
【发布时间】:2021-09-12 06:41:45
【问题描述】:

我已将 C# 代码编译为 DLL,但对它们没有什么经验。我的 C# 代码包含一个类 HelloWorld 和一个静态方法 Print()。我想在 VBScript 中使用这个 DLL 来调用方法Print()。我知道这是基础,但我将其用作最终将编译为 DLL 的更大规模项目的测试。声明是什么样的?方法调用是什么样的?

【问题讨论】:

  • 我确实检查了该链接,但它并没有完全达到我想要的效果。我希望在运行时通过给定文件路径的 VBScript 动态加载 dll,而不是向服务器注册。同样,dll 对我来说很新,所以这可能是那个答案中正在发生的事情,我只是没有看到它。

标签: c# dll vbscript


【解决方案1】:

重要提示:仅当 DLL 公开 COM 接口时,这两种方法都有效。

如果您的 dll 已在系统中注册,请使用 CreateObject 及其 ProgID。

Set myObject = CreateObject("MyReallyCoolObject.HelloWorld")
myObject.Print

如果您的对象未在系统上注册,请使用GetObject 和包含您的对象的文件的路径。确保您的对象公开正确的接口。 (第二个参数是可选的。如果你的对象暴露了多个,你可以在这里提供一个类名。)

Set myObject = GetObject("C:\some\path\helloworld.dll", "appname.HelloWorld")
myObject.Print

【讨论】:

  • 我只成功地使用了 regasm 然后CreateObject。我永远无法让GetObject 工作。我错过了什么吗?谢谢!
  • 当我输入两个参数时:我得到一个错误:ActiveX 组件不能创建对象'GetObject'。当我只输入第一个时参数:我得到:在自动化过程中找不到文件名或类名。
  • 不注册dll可以吗?我不这么认为。
  • @BLuM 如果它暴露了一个 COM 接口。
  • 如何发布它?
【解决方案2】:

我想你可能正在寻找Registration-Free COM。这个关于 Microsoft.Windows.ActCtx 的 SO 答案应该专门为 VBScript 提供帮助。

请记住,COM 不支持静态方法,因此您必须将 Print 方法变成实例方法。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 好的,这就是如何将 DLL 注册到整个服务器/系统,但是我如何在 VBScript 中直接声明/调用 dll?我读了下面的链接,似乎说这是可能的,但是如果它是针对类的静态方法,那么声明的外观如何? support.microsoft.com/kb/106553
    • 您的链接谈到了 Visual Basic。不是VBScript。并且您的问题已经得到解答:stackoverflow.com/a/769346/736170
    • 该链接没有回答我的问题。并对语言混淆表示歉意。对于 VBScript,我确实需要这个,但我认为会有类似的过程。我想从我的脚本中调用 dll 而无需在服务器上注册。它应该在运行时从文件路径动态加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2011-06-07
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多