C#调用非托管的DLL出错,“无法加载DLL,找不到指定的模块”

时间:2021-12-08 19:14:28
我需要调用的这个dll里,又引用了其他的非托管dll,我已将这个dll以及它依赖的dll放到执行目录下和system32目录下了,但是还是出现,“无法加载DLL,找不到指定的模块”的错误。我确定我的语法和dll没有问题(用同样方法调用一个没有依赖其他dll的dll,就没有问题)。

请问这种依赖其他dll的dll在C#里该如何调用?

8 个解决方案

#1


你这个问题比较严重啊。请问你那个托管的DLL调用那个非托管的DLL是系统自带的还是自定义的。如果是自定义的就麻烦一点,你需要查看托管那个DLL的源码确定调用的非托管DLL的路径。如果没有源码的话,可以尝试将路径全部改为英文的,长度和文件深度都要太大了。就是修改一下文件夹的名字,其中不要带有中文,可以试试。

#2


dll注册没有?

#3


dll无法注册,报出的错误同样是 无法加载DLL,找不到指定的模块

#4


那你把依赖的所有的dll的路径都放正确了呢?

#5


杯具了无法注册,我也遇到过C++开发的COM组件,已注册REgsvr32就崩溃,最后还是重装系统才搞定

#6


还有种可能,你的入口点函数又没写对,建议用.net提供的depends查看下入口点函数

#7


这个问题很纠结
我同学前几天也出现这个问题
他把vs2008卸载了
重装也有这问题
最后重装系统
再装vs2008就好了

#8


点击 VS 工具菜单中的 ActiveX 控件测试容器,在弹出窗口中选择“文件”菜单中的“注册控件”,从而浏览自己所要调用的 DLL 文件,这样就完成了注册。接下来的工作就好办了。

#1


你这个问题比较严重啊。请问你那个托管的DLL调用那个非托管的DLL是系统自带的还是自定义的。如果是自定义的就麻烦一点,你需要查看托管那个DLL的源码确定调用的非托管DLL的路径。如果没有源码的话,可以尝试将路径全部改为英文的,长度和文件深度都要太大了。就是修改一下文件夹的名字,其中不要带有中文,可以试试。

#2


dll注册没有?

#3


dll无法注册,报出的错误同样是 无法加载DLL,找不到指定的模块

#4


那你把依赖的所有的dll的路径都放正确了呢?

#5


杯具了无法注册,我也遇到过C++开发的COM组件,已注册REgsvr32就崩溃,最后还是重装系统才搞定

#6


还有种可能,你的入口点函数又没写对,建议用.net提供的depends查看下入口点函数

#7


这个问题很纠结
我同学前几天也出现这个问题
他把vs2008卸载了
重装也有这问题
最后重装系统
再装vs2008就好了

#8


点击 VS 工具菜单中的 ActiveX 控件测试容器,在弹出窗口中选择“文件”菜单中的“注册控件”,从而浏览自己所要调用的 DLL 文件,这样就完成了注册。接下来的工作就好办了。