Сайт PInvoke.NET

Ноябрь 21st, 2010 от Abizan Оставить ответ »

При работе над одним проектом на 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.

Реклама

Добавить комментарий

Копирование материалов сайта допускается только с разрешения администрации сайта.