Как передать nullable тип функции P/invoked [дубликат]

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;

Например,

изменить таблицу Адрес удаленного столбца сотрудника;

12
задан River 27 December 2017 в 19:06
поделиться

1 ответ

Невозможно передать тип Nullable в функцию PInvoke'd без некоторых ... интересных манипуляций с байтами в машинном коде, что почти наверняка не то, что вам нужно.

Если вам нужна возможность передавать значение структуры как NULL в собственный код, объявите перегрузку вашего объявления PInvoke, которое принимает IntPtr вместо структуры, и передайте IntPtr.Zero

[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, ref int enumerator, IntPtr hwndParent, uint Flags);
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, IntPtr enumerator, IntPtr hwndParent, uint Flags);

Примечание: я добавил класс ref до первой подписи. Если собственная подпись может принимать значение NULL, скорее всего, это указатель. Следовательно, вы должны передавать типы значений по ссылке.

Теперь вы можете выполнять следующие вызовы

if (enumerator.HasValue) { 
  SetupDiGetClassDevs(someGuid, ref enumerator.Value, hwnd, flags);
} else {
  SetupDiGetClassDevs(someGuid, IntPtr.Zero, hwnd, flags);
}
11
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: