Использование функции signature VCS_GetCurrentIsAveraged(KeyHandle,NodeId, short* pCurrentIsAveraged, pErrorCode)
требует от вас использования небезопасного кода, которого следует избегать, если вы новичок в C #. Это похоже на оболочку p / invoke вокруг C-style API.
В нынешнем виде вам нужно будет вызывать его следующим образом (из небезопасного блока) (fixing
может не потребоваться, если currentIsAveraged находится в стеке):
short currentIsAveraged = 0;
double current;
fixed (short* pCurrentIsAveraged = ¤tIsAveraged) {
current = VCS_GetCurrentIsAveraged(KeyHandle,NodeId,pCurrentIsAveraged, pErrorCode);
}
bool isCurrentAveraged = (currentIsAveraged != 0);
Если вы контролируете определение p / invoke VCS_GetCurrentIsAveraged
, вы можете изменить эту подпись, чтобы использовать ref short pCurrentIsAveraged
вместо short* pCurrentIsAveraged
. Это позволит вам использовать этот метод следующим образом (без необходимости небезопасного кода):
short currentIsAveraged = 0;
double current;
current = VCS_GetCurrentIsAveraged(KeyHandle,NodeId,ref currentIsAveraged, pErrorCode);
bool isCurrentAveraged = (currentIsAveraged != 0);
Вы можете дополнительно оптимизировать сигнатуру p / invoke, используя атрибут [Out]
для этого значения, чтобы маршаллер пропустил, вероятно, ненужную копию, и вы также могли бы посоветовать компилятору трактовать его как bool
напрямую, а не возвращаться туда-сюда с short
, но это все продвинутые вещи. Проверьте пространство имен System.Runtime.InteropServices
, если вы заинтересованы в этом.