У меня есть .dll написанных на C++ с использованием функцией, определенной как это:PInvoke с «странными» функциями
EDK_API int EE_CognitivSetCurrentLevel (unsigned int userId,
EE_CognitivLevel_t level,
EE_CognitivAction_t level1Action,
EE_CognitivAction_t level2Action,
EE_CognitivAction_t level3Action,
EE_CognitivAction_t level4Action
)
Set the current Cognitiv level and corresponding action types.
Parameters:
userId - user ID
level - current level (min: 1, max: 4)
level1Action - action type in level 1
level2Action - action type in level 2
level3Action - action type in level 3
level4Action - action type in level 4
использованием этой функции, как вы можете видеть выше: если уровень = 1, то» буду называться так:
EE_CognitivSetCurrentLevel(userId,1,level1Action);
если уровень = 2, то:
EE_CognitivSetCurrentLevel(userId,2,level1Action,level2Action);
и так далее ...
Как я могу вызвать эту функцию в C#?
спасибо!
Используется ли функция C++ 'EE_CognitivSetCurrentLevel()' для использования параметров по умолчанию или это функция '__cdecl', которая принимает переменное число параметров? В зависимости от этого правильный подход будет различным. –
К сожалению, у меня нет исходного исходного кода dll. Как я могу узнать, что он написан для использования параметров по умолчанию или это функция * _cdecl *? – Vimvq1987
Если по умолчанию не используется одно и то же соглашение, вы получите неправильные аргументы. Если вы хотите o установить его явно, добавьте это внутри аргументов DllImport в свой ответ: CallingConvention = CallingConvention.Cdecl. Ознакомьтесь с http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx для других параметров, если необходимо. – Gonzalo