2 smartgps2008 smartgps2008 于 2015.06.03 17:27 提问

LoadLibraryEx GetLastError

咨询个问题:
VS2010中LoadLibraryEx返回的HINSTALLCE正确,并且能执行dll中的接口函数,
dll文件路径是正确的,但是执行LoadLibraryEx后,
为什么GetLastError()会返回错误码2,即ERROR_FILE_NOT_FOUND,
_这个Agent.dll之前是vs2008生成的,现在项目移到vs2010中

TCHAR dll[] = _T("D:\\Project\\trunk\\build\bin\\Debug\\Agent.dll");
int error 1= GetLastError();//error=0
HINSTANCE hLib = LoadLibraryEx(dll, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
int error2 = GetLastError();//error=2???
if (hLib>=(HINSTANCE)HINSTANCE_ERROR)
{
typedef HRESULT (_stdcall *EntryFunc)();
EntryFunc lpDllEntryPoint=NULL;
if(isReg)
{
lpDllEntryPoint = (EntryFunc)GetProcAddress(hLib, "DllRegisterServer");
}
else
{
lpDllEntryPoint = (EntryFunc)GetProcAddress(hLib, "DllUnregisterServer");
}
if(lpDllEntryPoint)
{
if(SUCCEEDED((*lpDllEntryPoint)()))
{
BOOL isOK=TRUE;//能够执行到这里来,loadlibraryEx应该成功了
}
}
FreeLibrary(hLib);
}

7个回答

bdmh
bdmh   Ds   Rxr 2015.06.03 17:30

ERROR_FILE_NOT_FOUND,文件未找到,dll位置在哪

smartgps2008
smartgps2008   2015.06.03 17:34

TCHAR dll[] = T("D:\Project\trunk\build\bin\Debug\Agent.dll");
_上面这个就是dll所在绝对路径

hellspawn
hellspawn   2015.06.03 17:46

字符串中路径分割符要用双反斜杠,单个是转义符。

zuishikonghuan
zuishikonghuan   2015.06.03 18:27

楼上正解,\是转义字符,应该写成
TCHAR dll[] = _T("D:\Project\trunk\build\bin\Debug\Agent.dll")

zuishikonghuan
zuishikonghuan 回复smartgps2008: 换LoadLibrary试试,别用LoadLibraryEx了
2 年多之前 回复
smartgps2008
smartgps2008 代码中是以双反斜杠\\分隔的,CSDN给转义成一个了,我加3个 ,就变成\\
2 年多之前 回复
smartgps2008
smartgps2008 以双反斜杠\\\,CSDN给转义成一个了,我加3个
2 年多之前 回复
zuishikonghuan
zuishikonghuan TCHAR dll[] = _T("D:\\Project\\trunk\\build\\bin\\Debug\\Agent.dll")
2 年多之前 回复
zuishikonghuan
zuishikonghuan 毛线啊,csdn会把\\自带转换成\?!
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.06.03 19:33

这个DLL路径如果正确的话,是不是DLL本身还有其他依赖,因为缺少依赖而加载不起来
用depends查看一下dll的依赖项

gamefinity
gamefinity   Rxr 2015.06.03 21:44

msdn上讲的很清楚,如果返回值是NULL才看GeLastError。你不是NULL的时候,看的GetLastError不一定是对的。可能是前一个错误操作的Error

datou431
datou431   Rxr 2015.06.18 11:10

字符串中路径分割符要用双反斜杠,单个是转义符。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!