Функция DLLImport C++ с параметрами по умолчанию
-
26-09-2019 - |
Вопрос
Я пытаюсь импортировать функцию из dll неуправляемого кода С++ в свое приложение С#.Прототип С++
int somefunction (int param1, int *param2 = NULL);
Как мне объявить это в С#, чтобы воспользоваться преимуществами параметра param2 по умолчанию?Следующий код не работает.param2 инициализируется мусором.
DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
Решение
Если вы используете C# 4.0, то ответ dtb — правильный подход.В C# 4.0 добавлена поддержка дополнительных параметров, и они так же хорошо работают с функциями PInvoke.
До C# 4.0 невозможно было воспользоваться преимуществами необязательного параметра.Ближайшим эквивалентом является определение одной функции, которая пересылает данные в другую.
[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2);
static int somefunction(int param1) {
someFunction(param1, IntPtr.Zero);
}
Другие советы
Пытаться
[DllImport("mydll.dll", EntryPoint = "somefunction")]
static unsafe extern int somefunction(int param1, int* param2 = null);
или
[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2 = default(IntPtr));
Не связан с StackOverflow