问题:
写项目时要调用a.dll,a.dll依赖a1.dll,路径确保无误,dll也在对应的目录,依赖dll也在,使用LoadLibrary()加载时会失败,用GetLastError()返回126。网上搜了下126是没有找到指定模块;
解决方案:
2种解决方案:
1. 调用的dll放在指定目录,依赖的dll放在程序目录下

当前运行的程序是test.exe,在D:\\TEST\\文件夹下,
a.dll在D:\\TEST\\DLL\\文件夹下,
那么要把a1.dll放在D:\\TEST文件夹下

2. 使用LoadLibraryEx()函数

LoadLibraryEx(sdkFullPath,NULL, LOAD_WITH_ALTERED_SEARCH_PATH)
LoadLibraryEx参数说明
lpLibFileName String,指定要载入的动态链接库的名称。采用与CreateProcess函数的
lpCommandLine参数指定的同样的搜索顺序
hFile Long,未用,设为零
dwFlags Long,指定下述常数的一个或多个
DONT_RESOLVE_DLL_REFERENCES:不对DLL进行初始化,仅用于NT
LOAD_LIBRARY_AS_DATAFILE:不准备DLL执行。如装载一个DLL只是为了访问它的资源,就可以改善一部分性能
LOAD_WITH_ALTERED_SEARCH_PATH:指定搜索的路径

参考:https://www.cnblogs.com/huangsitao1024/p/10174034.html

公司项目采用Electron(electronjs.org/ )开发pc应用,会涉及到与底层硬件设备的通信,而sdk封装 基本上都是通过 C++ 动态链接库dll实现的。 有两种方案可供选择: 方案一: 使用node-ffi 方案二: 使用C++编写一个node addon,通过LoadLibrary调用dll 以上两种方案都可以解决dll调用问题,方案选型要个人对C++ 的掌握程度,如果熟悉C++开发,可以直接选择方案二最方便。如果完全不了解C++,那么只能采用方案一。 由于笔主不太懂C++,最终选择第一种方案。 二、什么是node-ffi? ( www.npmjs.com/pack
使用::LoadLibrary(sdkFullPath)动态加载海康dll,加载失败,GetLastError返回错误码126。 错误码126表示没有找到指定模块,但是::LoadLibrary的参数sdk路径是正确的。 最后使用::LoadLibraryEx(sdkFullPath,NULL, LOAD_WITH_ALTERED_SEARCH_PATH),...
Qt开发的dll,在VS项目里加载报”找不到指定模块“,GetLastError = 126 即使LoadLibrary用绝对路径也不对 这是因为Qt开发的dll往往还依赖Qt本身的dll文件,当LoadLibrary找不到这些文件时也会报126 因此用指令windeployqt xxx.dll看看dll都依赖了哪些库,然后一起放在exe路径下就可以了。 因此LoadLibrary不仅需要找引用的dll本身,还需要找dll依赖的dll,否则就会报126.
可以使用Matlab中的loadlibrary函数来调用DLL文件。首先,需要确认DLL文件是否在Matlab的搜索路径中,如果不在,可以通过addpath函数添加到搜索路径中。然后,可以使用loadlibrary函数加载DLL文件,语法如下: loadlibrary('DLL文件路径','头文件路径') 其中,DLL文件路径是DLL文件的完整路径,头文件路径是包含DLL文件导出函数声明的头文件路径。 加载成功后,可以使用calllib函数来调用DLL文件中的导出函数,语法如下: output = calllib('DLL名称','导出函数名称',input) 其中,DLL名称是通过loadlibrary函数加载的DLL文件的名称,导出函数名称是DLL文件中要调用的函数名称,input是传递给导出函数的输入参数,output是导出函数的输出参数。 注意,在使用loadlibrary和calllib函数时,需要根据DLL文件的导出函数类型和参数类型进行正确的匹配。