関数が失敗したときにエラーコードをチェックすることは良い最初のステップですが、そのエラーコードが何を意味するかを確実に理解する必要があります。GetLastError
関数によって返される可能性のあるエラーコードは、ここに記載されています。
この場合、エラーコードは2であると言います。これはに対応しますERROR_FILE_NOT_FOUND
。
システムは、指定されたファイルを見つけることができません。
あなたはおそらく自分自身に問いかけているでしょう:ファイル、どのファイル?ええ、時々エラーコードを理解することは少し創造的な考えを必要とします。OpenSemaphore
それでは、考えてみましょう。関数に関して、「ファイルが見つかりません」とはどういう意味でしょうか。パラメータの1つは、開くセマフォの名前を指定する文字列です。それはファイルのようなものですよね?良いリードになるのに十分近い!
その場合、lpName
パラメーターに指定している値が有効なセマフォに対応していない可能性があります。私が通常最初にチェックするのは文字列のlpName
大文字と小文字です。値との比較では大文字と小文字が区別されます。しかし、以前は32ビットアプリケーションで動作していたとおっしゃっていたので、おそらくここで問題が発生しているわけではありません。
ただし、32ビットから64ビットへの移行は別の手がかりを与えてくれます。32ビットアプリケーションと64ビットアプリケーションは非常に異なる獣であり、通常、相互に接触することは許可されていないことに注意してください。したがって、64ビットアプリケーションが32ビットアプリケーションによって作成されたセマフォを使用できず、その逆も同様であるのは当然のことです。
新しいCreateSemaphore
セマフォを作成するために電話をかけるとうまくいくとあなたが言ったことを考えると、それは答えを見つけるための私たちの道に私たちをうまく連れて行きます。関数の呼び出しで開こうとしているセマフォは32ビットプロセスによって作成されたものであるため、64ビットプロセスで開いたり使用したりすることはできません。(ドキュメントには、 「関数を使用して、あるプロセスがすでにセマフォを作成している場合にのみ、関数が成功する」と記載されていることを覚えておいてください。)64ビットプロセスで新しいセマフォを作成すると、問題なく開いて使用できます。 。OpenSemaphore
CreateSemaphore