在C#中使用Windows API函数

时间:2013-04-09 18:58:23

标签: c# pinvoke

所以,我想在C#中使用CreateProcess API函数。我知道我必须导入kernel32.dll文件并覆盖函数头并将其标记为extern。我也知道我必须实现函数使用的结构。我遇到的问题如下:我在哪里可以看到我需要实现的结构的确切结构?

[DllImport("Kernel32.dll")]
public static extern HANDLE CreateThread(PSECURITY_ATTRIBUTES psa,
                                             DWORD cbStack,
                                             PTHREAD_START_ROUTINE pfnStartAddr,
                                             PVOID pvParam,
                                             DWORD fwdCreate,
                                             PDWORD pdwThreadID);

我需要实现以下结构才能使其正常工作:HANDLE,DWORD ......以及其他如何做到这一点?

3 个答案:

答案 0 :(得分:4)

您无需重新实施这些类型。您只需将它们转换为适当的.NET等效项:

Platform Invoke Data Types

您可能也有兴趣知道.NET有自己创建线程和进程的方法:

Process Class (System.Diagnostics)

Thread Class (System.Threading)

答案 1 :(得分:3)

您可以使用pinvoke.net作为Win32 API翻译的来源。例如,以下是您感兴趣的两个:

请注意,那里的翻译质量可变。例如,上面的链接有CreateThread的两个版本。其中只有一个是准确的。很明显它是哪一个!

更一般地说,您应该好好阅读MSDN p/invoke tutorialMarshaling Data with Platform Invoke

答案 2 :(得分:1)

我发现MSDN主题Windows Data Types有助于识别Windows DLL中使用的各种类型别名。