P / Invoke на 32-битных и 64-битных системах - PullRequest
2 голосов
/ 15 марта 2010

Давайте в качестве примера выберем следующий вызов Win API:

BOOL MessageBeep(UINT uType); // from User32.dll

Входным параметром является UINT для указания типа звукового сигнала, который может быть как 32-разрядным, так и 64-разрядным целым числом, в зависимости от того, какую версию Windows мы вызываем ( или я ошибаюсь? ).

Если я хочу P / Invoke звуковой сигнал из C #, я применяю объявление DllImport:

[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);

Будет ли этот код C # работать под Windows x64?

  • Если да, почему нормально вызывать вызов 32-битным целым числом, в то время как ожидается 64-битное целое (при условии, что я прав в этом)?
  • Если нет, как должна выглядеть правильная декларация P / Invoke, независимая от платформы, в C #?

1 Ответ

5 голосов
/ 15 марта 2010

Вы не правы.

Однако для типов, подобных HANDLE, которые различаются в зависимости от битности, следует использовать IntPtr.

Если вы не уверены в декларации P / Inoke, первое место для проверки - здесь .

...