用命名对象来防止运行一个应用程序的多个实例
在main或WinMain函数中Create*函数创建一个命名的内核对象。 当Create*函数返回时, 调用GetLastError函数。 如果已经应用程序已经有一个实例在运行了, GetLastError就会返回ERROR_ALREADY_EXISTS。我的问题是,如果在调用Create*函数以前, 这个lasterror就已经是ERROR_ALREADY_EXISTS了。 那这次Create*如果没有返回ERROR_ALREADY_EXISTS的话, GetLastError会不会得到一个“过时了的” ERROR_ALREADY_EXISTS呢?

解决方案 »

  1.   

    如果这次Create没有发现已存在的,GetLastError()=0
      

  2.   

    You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data. That is because some functions call SetLastError(0) when they succeed, wiping out the error code set by the most recently failed function.
    如果在此之间,其它函数没有出错,或者没有调用SetLastError,我觉得会得到ERROR_ALREADY_EXISTS
      

  3.   

    Create*函数返回失败了,再去检查GetLastError,能保证返回的就是这次的错误号。
    如果都返回成功了,那就不用去GetLastError了。
      

  4.   

    不会的。
    如果create……执行成功了,用GetLastError会得到执行成功的消息。GetLastError函数是返回最近一个函数的执行成功与否的消息。
      

  5.   

    如果不放心的话,可以先SetLastError(0)