为什么是RegCreateKeyEx()返回 LONG ,而不是设置 DWORD错误代码来自 SetLastError() ?
转换它的 LONG 对我来说安全吗?将值返回给 DWORD然后用 SetLastError() 将其设置为全局错误代码?
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx
最佳答案
Why is it that RegCreateKeyEx() returns a LONG, instead of setting a DWORD error code via SetLastError()?
可能是因为当 Windows 还是 16 位时,Registry API 就开始出现了,而那时 SetLastError()/GetLastError() 函数还不存在。添加 Registry 函数的 32 位版本的人决定保持调用样式向后兼容比更新为使用 SetLastError() 更重要。
查看 Raymond Chen 的精彩博客(和精彩的书)here和 here获取相关信息。
Would it be safe for me to convert its LONG return value to a DWORD and then set it as the global error code with SetLastError()?
没有理由不。只要您对包括 ERROR_SUCCESS 在内的每个值都执行此操作。
关于c - RegCreateKeyEx() 和 GetLastError(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281832/
在golang中syscall.GetLastError()不返回最后一个错误。看下面的例子ifhandle:=_OpenSCManager(machineNamePtr,databaseNamePtr,desiredAccess);handle==nil{iferr:=syscall.GetLastError();err!=nil{returnInvalidServiceDatabaseHandleHandle,ServiceErrno(err.(syscall.Errno))}}err始终为nil。假设machineNamePtr是一台不存在的机器。使用C++测试了相同的代码,Ge
我试图使用Microsoft的调试诊断工具(DebugDiag)来识别w3wp.exe/clr.dll中发生的应用程序事件日志错误,如thisanswer中所述.但是,当我尝试添加新规则时,出现错误对话框:Cannotconnecttoservice.FailedtostartDbgSVC.GetLastErrorreturns0x00000422如何才能成功添加规则? 最佳答案 此错误表明DebugDiagnosticService服务被禁用。修复:开始>运行>services.msc在出现的“服务”对话框中,在列表中找到“调试诊
我正在构建WindowsUMDF2.0驱动程序,当我调用OpenEvent时出现错误2。任何帮助都将非常有用。下面是我的代码HANDLEuserEvent=OpenEvent(EVENT_ALL_ACCESS,FALSE,myUserEvent);标准::计数 最佳答案 Windows7,8需要安全描述符,而wec不需要。它们的默认安全描述符不同。此外,如果您的事件要由不同的用户或提升的进程访问,您需要将其设为全局事件,否则将无法访问它。 关于windows-OpenEvent,getl
我在MSDN上搜索了一下HANDLEWINAPICreateFile(_In_LPCTSTRlpFileName,_In_DWORDdwDesiredAccess,_In_DWORDdwShareMode,_In_opt_LPSECURITY_ATTRIBUTESlpSecurityAttributes,_In_DWORDdwCreationDisposition,_In_DWORDdwFlagsAndAttributes,_In_opt_HANDLEhTemplateFile);如果dwCreationDisposition==CREATE_ALWAYS或OPEN_ALWAYS,它表
try{pConnect=sess->GetFtpConnection(ftpArgs.host,ftpArgs.userName,ftpArgs.password,port,FALSE);}catch(CInternetException*pEx){loginErrCode=GetLastError();printf("loginErrCode:%d\n",loginErrCode);if(loginErrCode==12013){printf("Incorrectusername!\n");exit(0);}elseif(loginErrCode==12014){printf("I
为什么是RegCreateKeyEx()返回LONG,而不是设置DWORD错误代码来自SetLastError()?转换它的LONG对我来说安全吗?将值返回给DWORD然后用SetLastError()将其设置为全局错误代码?http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx 最佳答案 WhyisitthatRegCreateKeyEx()returnsaLONG,insteadofsettingaDWORDerrorcodev
这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WhydoesGetErrorMessagereturn“wrongpassword”,whentheusernameiswrong?自GetErrorMessageg为无效密码和用户名保留相同的字符串,我决定使用GetLastError(),因为它有一个单独的错误each.但是,如果用户名不正确,它仍然会给我代码12014?(密码错误)但有一个单独的错误代码:ERROR_INTERNET_INCORRECT_USER_NAME-12013这不应该起作用吗?或者这也是有意为之的吗?谢谢。try{pConnec
我正在尝试使用InternetSetOption(...)方法为代理设置用户名和密码。但是,它总是返回零,最后一个错误设置为12018。下面是我的代码片段。#include"stdafx.h"#includeint_tmain(intargc,_TCHAR*argv[]){HINTERNET_session=::InternetOpen(_T("TestProgram"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,NULL);LPCTSTRproxyUserName=L"username";LPCTSTRproxyPassword=L"userpas
我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的...我正在使用Windows7,VS2010。我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对LoadImage()的调用,该调用从资源文件中获取图标图像,并最终发送给taskber(使用shell_notifyicon)。在运行应用程序时,这似乎在前几个小时内工作正常,但突然LoadImage()开始失败(它始终是它尝试加载的同一个.ico文件)并返回NULL。我在之后直接插入了一个GetLastError调用,但它总是返回0(表示成功)。图像本身仍然是好的和有效的,我无法解释这一点。有什么线索吗?
我有一个从当前路径加载DLL的简单程序#include#includeusingnamespacestd;autoloaddll(constchar*library){autodllModule=LoadLibrary(library);if(dllModule==NULL)throw"Can'tloaddll";returndllModule;}intmain(){try{autoHandle=loaddll("ISab.dll");}catch(constchar*error){cerr加载库对当前路径中的每个DLL都失败,但对像User.dll这样的DLL成功如果我运行它,输出会