Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将win32 API与C结合使用#_C#_Multithreading_Winapi_Mutex_Semaphore - Fatal编程技术网

C# 如何将win32 API与C结合使用#

C# 如何将win32 API与C结合使用#,c#,multithreading,winapi,mutex,semaphore,C#,Multithreading,Winapi,Mutex,Semaphore,如何将win32连接到C#并使用win32函数创建信号量、互斥量等。您不需要使用win32 API来使用互斥量或信号量。他们已经为此内置了.NET类,并且从互斥1.1版和信号量2.0版开始: 一些.NET内部代码显示互斥类实际上使用Win32 API:作为一个快速示例,下面的代码是.NET中Threading.Mutex类的OpenMutex和ReleaseMutex方法的反编译源代码。它使用DllImport属性和extern关键字来访问kernel32.dll中的函数 [DllImp

如何将win32连接到C#并使用win32函数创建信号量、互斥量等。

您不需要使用win32 API来使用互斥量或信号量。他们已经为此内置了.NET类,并且从互斥1.1版和信号量2.0版开始:

一些.NET内部代码显示互斥类实际上使用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);
我想你可以用这些片段来进行探索,在这个方便的网站上可以找到更多的信息:

C#提供了自己的方法来做这些事情。你不应该混合使用Win32和C#,而且绝对不建议这样做,因为.NET注定要取代Win32

MSDN在()上有一个示例


如果您仍然希望使用.NET和Win32,则必须使用具有CLI功能的C++。< /P>我的任务是用Mutexes和SimaPrEES任务执行Win32和任何编程语言的编写程序。我懂Java,但很难将win32和Java结合起来。我认为C++更接近java,更容易学习C语言而不是C++。所以我想知道如何编译win32和c#你有没有检查过Java JNI?(Java本机接口)这可能是一种更好的方法。。。NET类实际上是Win32函数的包装器。使用这些对象比直接使用Win32 API简单得多。值得吗?我认为C#更接近win32,使用JNI和win32检查我最近对DllImport和extern的编辑是愚蠢的。还可以查看此站点:我尝试使用System.Runtime.InteropServices;和[DllImport(“kernel32.dll”,SetLastError=true)],但我不知道这是对的