看看前面的代码CreateFile打开文件后没关闭文件
C#程序里LoadLibrary加载dll失败, 报告"找不到指定的模块" . 一些文章说是DLL的unicode设置的问题. 设置Visual Studio的unicode环境设置: C/C++, Preprocessor difinitions 去除_MBCS,加_UNICODE,...
老杨封装了一个视频处理的C++编写的DLL. C#程序里LoadLibrary加载dll失败, 报告"找不到指定的模块" .
一些文章说是DLL的unicode设置的问题. 设置Visual Studio的unicode环境设置: C/C++, Preprocessor difinitions 去除_MBCS,加_UNICODE,UNICODE 无效
用Dependency Walker查看我编写的封装dll的依赖项, 除了avcodec.dll, avutil.dll等几个之外, Dependency Walker还报告以下依赖的dll找不到:
API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
GPSVC.DLL
IESHIMS.DLL
后来查找到http://stackoverflow.com/questions/1043913/copying-a-dlls-dependencies-in-visual-studio
里面提到Dependency Walker is misleading in this case and caused me to lose time. the list of "missing" dlls from first post is not helpful, you can probably ignore it.
即Dependency Walker的报告其实是误导了, 上面的那些依赖DLL其实都用不着, 还是只要有avcodec.dll, avutil.dll那几个就可以了, 把这几个dll移至exe可执行文件的同一目录下,问题解决!
通过单步调试发现,p的值始终为0X00000000,即LoadLibrary调用失败 查了很多资料,将总结以及我的解决方案记录如下 检查路径是否正确。我用的是相对路径,相对路径需要把该dll文件放在程序生成的exe文件目录下...

遇到的问题

代码如下
void *p=NULL; p=LoadLibrary("***.dll");
通过单步调试发现,p的值始终为0X00000000,即LoadLibrary调用失败
查了很多资料,将总结以及我的解决方案记录如下
检查路径是否正确。我用的是相对路径,相对路径需要把该dll文件放在程序生成的exe文件目录下(也就是VS中 项目->属性->(配置属性)常规->输出目录),然后由于字符格式问题,可以写成这样p=LoadLibrary(TEXT("***.dll"));TEXT宏可以消除格式问题。DLL的一致性问题。也就是exe版本必须要和dll版本在debug/release上是一致的,x64或者win32可能也需要保持一致。我是用的release x64版本。如果还没有解决问题,采用GetLastError()函数获取错误消息,GetLastError()函数是获取上一个发生错误的结果的api,所以要在LoadLibrary下一行接着调用void *p=NULL; p=LoadLibrary("***.dll"); DWORD error_id=GetLastError();通过打印或者在单步调试中查看error_id的值,然后搜索相应解决办法。我的返回值是193,主要问题是我加载的这个dll还关联着其他的dll,所以我将需要用到的dll都放在了exe程序的目录下就成功运行了。
我在wince6中使用LoadLibrary加载一个自己写的dll失败了,调试信息提示: ERROR: could not resolve import CreateStreamOnHGlobal !!! Please Check your SYSGEN variable !!! 同样的代码和dll我在wince5上是...
前几天,在联网测试三方的dll,但是出现dll放到exe目录下面可以正常加载,如果单独放一个目录却出现126错误代码,找不到指定的模块。 由于三方dll使用zlib版本和exe使用的zlib版本不同,所以三方的dll又不能放到exe...
使用::LoadLibrary(sdkFullPath)动态加载海康dll,加载失败,GetLastError返回错误码126。 原因分析 错误码126表示没有找到指定模块,但是::LoadLibrary的参数sdk路径是正确的。 解决方案 最后使用::...
有时候我们动态加载Dll时,发现使用LoadLibrary,调用失败。dll路径也没错。 原因在于dll中含有其他需要加载的dll。最好使用另外一个接口加载dll。 LoadLibraryEx("dll路径.dll",0,LOAD_WITH_ALTERED_SEARCH_PATH)...
若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx: eg: LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_...
无效的EXE格式,你调用LoadLibrary参数中的DLL是损坏的。
LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对。此场景细分为以下几种情况: 1.1 文件路径的确错误。比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a...
因为要做自动化接口的时候要加载外部的dll进行测试,调用loadlibrary的时候,总提示system error,加载不上,但是dll确实在那里。 问题解决: 我的Project的选项package下为了调试方便,设置了ALLINONE编译指令,...
1、dll调用顺序为 应用程序所在的目录 》 system32目录 》...2、若DLL不在调用方的同一目录下,可以用LoadLibrary(L”DLL绝对路径”)加载。 但若被调DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是: ①...
加载DLL失败,因为 dll 中有一个全局类变量,由于在构造函数 没有初始化变量,导致 初始化 失败 异常。 C++ 变量没有初始值,全部都要 手动赋值 为0的这个特性 还真是烦人呢。。。 ...
方式一:LoadLibraryEx ... 若DLL不在调用方的同一目录下,可以用LoadLibrary(L"...但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用 LoadLibraryEx,通过指定 LOAD_WITH_ALTERED_SEARC...
若DLL不在调用方的同一目录下,可以用LoadLibrary(L”DLL绝对路径”)加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx: LoadLibraryEx(“DLL绝对路径”, NULL, LOAD_WITH_...
比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a.dll动态库竟然被拷贝到B文件夹下去了。 若真遇到这种低级错误,建议你找个没人的墙角蹲下用小拇指逆时针划圈圈去吧。。。 1.2 ...
根据GetLastError得知错误原因...通过文件资源管理器中查找该绝对路径下的dll或exe是否存在,指定路径时,一定要使用反斜杠(\),而不是正斜杠(/),字符串中注意需要双反斜杠(\),例:"C:\\Windows\\cmd.exe";...
若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。 但若被调DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用LoadLibraryEx: LoadLibraryEx(“DLL绝对路径”, NULL, LOAD_WITH_...