Коллеги,
Преамбула. Мой вопрос больше о лучших практиках. Я знаю один обходной путь. Это первый раз, когда мне приходится иметь дело с взаимодействием в C #, и в то же время я написал довольно много кода на C и C ++.
Мне нужно 2 раза вызвать функцию, предоставляемую неуправляемой DLL. Функция принимает указатель на структуру в качестве аргумента. 1-й раз мне нужно передать указатель null
. 2-й раз мне нужно передать указатель на экземпляр структуры.
Функция имеет 6 параметров, поэтому ниже приведены упрощенные объявления, которые работают для целей этого вопроса. (Я могу опубликовать подробности, если кому-то интересно.) Вот 1-й вариант декларации:
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(ref NEEDED_STRUCT_TYPE sDataStruct);
Мне это нравится, потому что оно строго типизировано для NEEDED_STRUCT_TYPE
. Но чтобы передать нулевой указатель, мне пришлось изменить объявление на
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool foo(IntPtr sDataStruct);
Теперь я могу передать IntPtr.Zero
для указателя null
, но параметр больше не является строго типизированным. В данной ситуации есть ли способ иметь и строго типизированный параметр, и возможность передавать нулевой указатель?
Любые предложения, идеи или рекомендации действительно приветствуются!
Ура,
- Ник