Поскольку это функция C ++, я предполагаю, что она имеет параметры по умолчанию. То есть, когда вы вызываете функцию со слишком малым количеством параметров, компилятор C ++ автоматически заполняет отсутствующие параметры значениями по умолчанию. C # не поддерживает параметры по умолчанию и не вызывает из DLL. Если это так, то вам нужно выяснить, что это за параметры по умолчанию, и вручную передать их. Если вы передадите неправильное количество параметров в функцию, вы получите странное поведение (или это может сработать, кто знает ).
Вы можете использовать перегрузку в C # для обеспечения того же поведения, которое вы видите в C ++:
class EEFunctions {
[DllImport ("yourdll", EntryPoint ("EE_CognitivSetCurrentLevel")]
private extern static int EE_CognitivSetCurrentLevelDLL(int level, int level1,
int level2, int level3, int level4);
private int defaultLevel = 0; // This is just an example
public static int EE_CognitivSetCurrentLevel(int level, int level1) {
return EE_CognitivSetCurrentLevel(level, level1,
defaultLevel, defaultLevel, defaultLevel);
}
public static int EE_CognitivSetCurrentLevel(int level, int level1, int level2) {
return EE_CognitivSetCurrentLevel(level, level1,
level2, defaultLevel, defaultLevel);
}
public static int EE_CognitivSetCurrentLevel(int level, int level1,
int level2, int level3) {
return EE_CognitivSetCurrentLevel(level, level1,
level2, level3, defaultLevel);
}
public static int EE_CognitivSetCurrentLevel(int level, int level1,
int level2, int level3, int level4) {
return EE_CognitivSetCurrentLevel(level, level1,
level2, level3, level4);
}
}
Это также предполагает, что все параметры являются целыми. Если вы можете найти определения типов параметров в заголовках C ++, вы можете создать совместимые типы в C #.