win32をC#に接続し、win32 関数を使用してセマフォ、ミューテックスなどを作成する方法。
2 に答える
ミューテックスまたはセマフォを使用するために Win32 API を使用する必要はありません。そのための .NET クラスが既に組み込まれており、Mutex 用のバージョン 1.1 とセマフォ用の 2.0 以降があります。
Mutex クラスが実際に Win32 API を使用していることを示す .NET 内部の一部: 簡単なサンプルとして、以下のコードは、.NET の Threading.Mutex クラスからの OpenMutex および ReleaseMutex メソッドの逆コンパイルされたソースです。DllImport 属性と extern キーワードを使用して、kernel32.dll の関数にアクセスします。
[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern SafeWaitHandle OpenMutex(int desiredAccess, bool inheritHandle, string name);
[DllImport("kernel32.dll", CharSet=CharSet.None)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern bool ReleaseMutex(SafeWaitHandle handle);
これらのスニペットを使用して探索を行うことができると思いますが、この便利なサイトでさらに多くの情報を入手できます: http://www.pinvoke.net/index.aspx
C# は、そのようなことを行うための独自のメソッドを提供します。Win32 と C# を混在させる必要はありません。また、.NET は Win32 から引き継ぐことを意図しているため、絶対にお勧めできません。
MSDN には、.NET (およびセマフォも)でミューテックスを使用する方法の例があります。
それでも .NET と Win32 を使用したい場合は、CLI を有効にして C++ を使用する必要があります。