Функция DLLImport c ++ с параметрами по умолчанию - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь импортировать функцию из неуправляемого кода c ++ dll в мое приложение на c #.Прототип c ++ -

int somefunction (int param1, int *param2 = NULL);

Как мне объявить это в c #, чтобы воспользоваться преимуществами по умолчанию для param2?Следующий код не работает.param2 инициализируется с мусором.

DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Если вы используете 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);
}
0 голосов
/ 29 сентября 2010

Попробуйте

[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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...