regsvr32与/ i和不带参数之间的区别

时间:2014-09-29 11:31:56

标签: winapi com vb6 cmd regsvr32

我可以用

成功注册一个COM-DLL(用VB6编写)dowFct.dll
regsvr32 dowFct.dll

但是当我尝试用

做的时候
regsvr32 dowFct.dll /i

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

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

我问我,如果将regsvr32与/ i一起使用并且没有任何其他参数是不一样的? 在这种情况下,有人可以帮我解决问题吗? - 谢谢。

3 个答案:

答案 0 :(得分:5)

  • 如果没有/i选项,regsvr32将加载DLL并调用导出的函数DllRegisterServer
  • 使用/i选项,regsvr32加载DLL并调用导出的函数DllInstall

显然,您的DLL不会导出DllInstall,因此它似乎可能会通过调用DllRegisterServer进行注册。因此,在调用regsvr32时省略/i选项。

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

  

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

     

要在regsvr32中使用DllInstall,请添加" / i"标志后面跟冒号   (:)和一个字符串。该字符串将作为传递给DllInstall   pszCmdLine参数。如果省略冒号和字符串,请输入pszCmdLine   将被设置为NULL。以下示例将用于安装   DLL。

regsvr32 /i:"Install_1" dllname.dll
     

调用DllInstall时将bInstall设置为TRUE并将pszCmdLine设置为   " Install_1&#34 ;.要卸载DLL,请使用以下命令:

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

使用上述两个示例,DllRegisterServer或   DllUnregisterServer也将被调用。要仅调用DllInstall,请添加   a" / n"标志。

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

答案 1 :(得分:1)

VB6 COM DLL不会导出DLLInstall(),这是一个函数,可以作为DLL对自身执行设置操作的方式(也是/i尝试执行的操作)所以你不需要需要担心它。

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

答案 2 :(得分:0)

您是否尝试过regsvr32 /?

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

  

/ i:cmdline:调用DllInstall传递一个可选的[cmdline]。当与/ u一起使用时,它会调用dll uninstall。

[source]