Вопрос

Я пытаюсь импортировать функцию из 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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top