使用regsvr32无法注册dll:模块“*.dll”未能加载

3

有一个类似的问题来自stackoverflow。但我发现答案并不是很有帮助。我也用谷歌搜索了一些网站,我看过这里这里。 我尝试了他们提供的方法来解决这个问题,但没有得到满意的答案。

我的操作系统是32位的Windows 7Noncircle.dll是在另一台安装了Matlab版本2010a的机器上生成的。我尝试在一个用C#编写的项目中添加Noncircle.dll作为引用(我没有在我的电脑上安装Matlab),但是Visual-Studio 2010告诉我出现了错误:

enter image description here

所以我怀疑 Noncircle.dll 可能需要注册。因此,我将 Noncircle.dll 放入 C:\Windows\System32 并以管理员身份启动 Cmd.exe,然后输入:

regsvr32 Noncircle.dll

然后我遇到了一个错误:

"The module "Noncircle.dll" failed to load.Make sure the binary is sorted at the 
 specified  path or debug it to check for problems with the binary or depenedent 
 .DLL files.The specified module coudl not be found."

你能给我一些提示吗?谢谢!

更新于2012/10/18

但如果我在我的电脑上安装了Matlab版本2010a,这个问题就解决了。


1
当你说Noncircle.dll是由MATLAB生成的时,它是如何生成的呢?使用MATLAB Compiler?使用MATLAB Builder NE for .NET?还是使用MATLAB Coder?你的电脑上是否安装了MATLAB Compiler Runtime(不是生成.dll的机器上)? - Sam Roberts
我只需在MATLAB中点击“文件\新建\部署项目”即可生成“Noncircle.dll”。我无法确定MATLAB是如何生成“Noncircle.dll”的。是的,我已经在我的计算机上安装了MATLAB编译器运行时,但我得到了相同的结果。 - viperchaos
“文件>新建>部署项目”应该会弹出一个对话框,要求输入项目名称和项目类型。你选择的项目类型是什么 - 根据你安装的产品不同,你可能会有多种选项可供选择,包括Windows独立应用程序、控制台应用程序、C共享库、C++共享库、.NET程序集、通用COM组件(以及其他与此问题无关的选项)。 - Sam Roberts
我选择了通用COM组件(很抱歉我没有提供生成dll的详细信息,因为另一个人是通过MATLAB生成的dll) - viperchaos
当regsvr32.dll本身未注册时,就会发生这种情况,尽管它在其他方面是必需的。死结。我相信有人知道如何做到这一点,但他们不会说话。等等。当regsvr32说它加载模块但找不到入口点时,这就是原因。 - Dimitri
3个回答

3

0

我知道现在已经有点晚了...但是我还是要为其他人添加我的解决方案,因为我在按照上述答案后遇到了同样的错误:

"我也遇到了同样的问题。

如果你正在运行64位Windows,并且将32位DLL放置在Windows\System32\中,那么它会给你这个错误。

只需将DLL放入Windows\SysWOW64\中并从那里注册即可。"

如果您在将DDL放置到SysWOW64后仍然遇到相同的错误,则需要打开MSMQ功能。

转到开始 -> 搜索"打开或关闭Windows功能" -> 找到"Microsoft Message Queue(MSMQ) Server"并启用它。

enter image description here

现在,再次注册相同的DLL,这次它将被注册


0

首先尝试使用RegDllView,查看系统中是否实际上注册了COM服务器。

还要检查这个DLL是否是一个COM组件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接