【问题标题】:difference between regsvr32 with /i and without parameterregsvr32 带 /i 和不带参数的区别
【发布时间】:2014-11-23 18:54:14
【问题描述】:

我能够成功注册 COM-DLL(用 VB6 编写)dowFct.dll

regsvr32 dowFct.dll

但是当我尝试这样做时

regsvr32 dowFct.dll /i

我收到错误消息(从德语翻译成英语):

模块 dowfct.dll 已加载,但未找到 DllInstall 入口点。

我在问我,如果使用 regsvr32 和 /i 并且没有任何附加参数是不是一样的? 在这种情况下,有人可以帮我出什么问题吗? - 谢谢。

【问题讨论】:

标签: winapi com vb6 cmd regsvr32


【解决方案1】:
  • 如果没有/i 选项,regsvr32 会加载 DLL 并调用导出的函数 DllRegisterServer
  • 使用/i 选项,regsvr32 加载DLL 并调用导出的函数DllInstall

很明显,您的 DLL 不会导出 DllInstall,因此它似乎希望通过调用 DllRegisterServer 来注册。因此,在调用 regsvr32 时省略 /i 选项。

DllInstall 的文档解释了这两个函数之间的区别:

DllInstall 仅用于应用程序安装和设置。它 不应由应用程序调用。它的目的类似于 DllRegisterServer 或 DllUnregisterServer。与这些功能不同, DllInstall 接受一个输入字符串,该字符串可用于指定一个 各种不同的动作。这允许将 DLL 安装在 不止一种方式,基于任何适当的标准。

要将 DllInstall 与 regsvr32 一起使用,请添加一个“/i”标志,后跟一个冒号 (:) 和一个字符串。该字符串将作为 pszCmdLine 参数。如果省略冒号和字符串,pszCmdLine 将被设置为 NULL。以下示例将用于安装 动态链接库。

regsvr32 /i:"Install_1" dllname.dll

在 bInstall 设置为 TRUE 且 pszCmdLine 设置为的情况下调用 DllInstall “安装_1”。要卸载 DLL,请使用以下命令:

regsvr32 /u /i:"Install_1" dllname.dll

对于上述两个示例,DllRegisterServer 或 DllUnregisterServer 也将被调用。要仅调用 DllInstall,请添加 一个“/n”标志。

regsvr32 /n /i:"Install_1" dllname.dll

【讨论】:

    【解决方案2】:

    VB6 COM DLL 不会导出 DLLInstall(),这是一个函数,可作为 DLL 对其自身执行设置操作的一种方式(并且是 /i 尝试执行的操作),因此您无需担心它。

    只需使用regsvr32 dowFct.dll(调用DllRegisterServer(),VB 编译器已为您添加到库中。)

    【讨论】:

      【解决方案3】:

      您是否尝试运行regsvr32 /?

      它告诉我有一些注意参数被发送到 dll 文件的 DllInstall 方法。

      /i:cmdline :调用 DllInstall 并传递一个可选的 [cmdline]。与/u一起使用时,调用dll卸载。

      [source]

      【讨论】:

      • 到目前为止,我一直认为 dowFct.dll regsvr32 /i dowFct.dllregsvr32 dowFct.dll 相同。不是这样吗?
      • 我不确定,但我猜是在 dll 文件上调用了另一种方法,但确实没有任何输入。
      猜你喜欢
      • 2012-06-14
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多