При работе над одним проектом на C# у меня возникала необходимость использования большого количества WinAPI-функций. Как Вы знаете, импортировать в C# функции из динамически загружаемых библиотек DLL можно, используя технологию P/Invoke. При этом нужно прописать все импорты функций и необходимых структур данных.
На это занятие может уйти некоторое время, которое можно было бы потратить на что-то более полезное
На сайте PInvoke.NET собрана огромная коллекция импортов WinAPI-функций и структур данных. Интересующую функцию, структуру или перечисление Вы можете найти воспользовавшись поиском в левой части сайта.
Приведу пример прототипа WinAPI-функции из MSDN и PInvoke.NET:
1 | BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration); |
| Прототип функции Beep() из MSDN | |
1 2 3 | [DllImport("kernel32.dll", SetLastError=true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool Beep(uint dwFreq, uint dwDuration); |
| Прототип функции Beep() из pinvoke.net | |
А вот например структура SYSTEM_INFO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | typedef struct _SYSTEM_INFO { union { DWORD dwOemId; struct { WORD wProcessorArchitecture; WORD wReserved; } ; } ; DWORD dwPageSize; LPVOID lpMinimumApplicationAddress; LPVOID lpMaximumApplicationAddress; DWORD_PTR dwActiveProcessorMask; DWORD dwNumberOfProcessors; DWORD dwProcessorType; DWORD dwAllocationGranularity; WORD wProcessorLevel; WORD wProcessorRevision; } SYSTEM_INFO; |
| Структура SYSTEM_INFO из MSDN | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_INFO { public ushort processorArchitecture; ushort reserved; public uint pageSize; public IntPtr minimumApplicationAddress; public IntPtr maximumApplicationAddress; public IntPtr activeProcessorMask; public uint numberOfProcessors; public uint processorType; public uint allocationGranularity; public ushort processorLevel; public ushort processorRevision; } |
| Структура SYSTEM_INFO из pinvoke.net | |
Вывод
Ресурс PInvoke.NET может здорово сэкономить время при разработке программ на C# под платформу Windows.
http://javabegin.ru/