Предупреждение о переносимости .NET: объявления P19voke CA1901 должны быть переносимыми - PullRequest
6 голосов
/ 22 июля 2011

Когда я добавляю следующие строки в мой код

[DllImport("user32.dll")]
static extern void keybd_event(byte key, byte scan, int flags, int extraInfo);

и выполнить анализ кода по Основным правилам правильности Microsoft , я получаю предупреждение CA1901. В основном, он жалуется, что 4-й параметр int extraInfo отлично работает на 32-битной платформе, но 64-битный целочисленный тип ожидается на 64-битной платформе.

Когда я изменил код на long extraInfo , требование к 64-битной платформе выполнено, но 32-битная платформа ожидает 32-битное целое число.

Как решить эту дилемму, не подавляя предупреждение?

1 Ответ

4 голосов
/ 22 июля 2011

Используя IntPtr , который является типом платформы, который используется для представления указателя или дескриптора:

[DllImport("user32.dll")]
static extern void keybd_event(byte key, byte scan, int flags, IntPtr extraInfo);
...