如何将win32连接到C#并使用 win32 函数创建信号量、互斥量等。
问问题
2127 次
2 回答
11
您无需使用 Win32 API 即可使用互斥锁或信号量。他们已经为此内置了 .NET 类,并且自 1.1 版以来用于 Mutex 和 2.0 版用于 Semaphore:
一些 .NET 内部显示 Mutex 类实际上使用了 Win32 API: 作为一个快速示例,下面的代码是 .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
于 2013-02-25T21:38:37.573 回答
3
C# 提供了自己的方法来做这些事情。您不必将 Win32 和 C# 混合使用,而且绝对不建议这样做,因为 .NET 旨在取代 Win32。
MSDN 有一个关于如何在 .NET 中使用互斥锁的示例(以及信号量)。
如果您仍希望使用 .NET 和 Win32,则必须使用启用 CLI 的 C++。
于 2013-02-25T21:39:49.850 回答