1

Regsvr32 作为 DLL 项目的构建后事件失败。

构建后事件: regsvr32 /s /c "$(TargetPath)" (也尝试不带引号)。

删除 /s 会导致错误消息 LoadLibrary("...") failed - The specified module could not be found。

如果我从命令提示符运行 regsvr32 结果是成功的。如果我复制并运行甚至直接运行“BAT000019.bat”文件,我会收到结果消息“...dll 中的 DllRegisterServer 成功”。我已经在 Dependency Walker 中加载了 DLL,没有发现任何问题。这在过去有效,但突然开始出现问题。我有大约 50 个具有相同后期构建事件的项目,只有大约 3 个有这个问题。生成bat文件时DLL文件确实存在(可能正在使用中???)。

我没有看到生成的 bat 文件有任何问题:

@echo off
regsvr32 /c "C:\ ... .dll"
if error level 1 goto VCReportError
goto VCEnd
:VCReportError
echo Project : error PRJ0019: A tool returned an error code from "Performing registration"
exit 1
:VCEnd

其他信息: 操作系统:Windows XP SP3。IDE:VS 2003 Pro(最新)。语言:C++

我可以只删除构建后事件,但宁愿为我们的一些较新的程序调试器保留它。

有人对如何解决这个问题有任何想法吗?

我尝试过的其他事情:构建后事件中 DLL 的相对路径。(失败)构建后事件中 DLL 的绝对路径。(失败)不带引号(绝对路径中不包含空格)。(失败)

4

1 回答 1

1

我认为您的项目不仅仅是由一个 DLL 制作的,也许您正在构建的 DLL 依赖于其他库(检查 DependencyWalker 并验证是否LoadLibrary/GetProcAddress也)但它们不存在用于 dll 的构建后事件。

如果您从输出目录中的命令提示符运行,那么您的 dll 需要的所有东西都可以注册。

据我所知,您无法为解决方案设置构建后事件,因此请检查您的项目依赖项/构建顺序)。我假设您不会尝试在其输出目录中单独注册 dll 而没有其依赖项(批处理中的路径应该匹配$(TargetPath)

于 2012-04-06T13:48:46.160 回答