我是C#的新手。对于我们使用的电机驱动器,我想查看其电流,并且在电机驱动器指南中有一个BOOL功能。但是我不知道如何使用它。
VCS_GetCurrentIsAveraged(KeyHandle,NodeId, short* pCurrentIsAveraged,
pErrorCode)
此函数的KeyHandle和NodeId是参数,pCurrentIsAveraged和pErrorCode是返回参数。
我的代码中已经有所有参数,除了pCurrentIsAveraged之外,这是我想看到的。因此,如何获得该值作为回报。
//Initialize
short* pCurrentIsAveraged;
double current;
current=VCS_GetCurrentIsAveraged(KeyHandle,NodeId,pCurrentIsAveraged,
pErrorCode)
这项工作,我想获取电流,但是我应该为pCurrentIsAveraged值输入什么作为返回参数?
谢谢。
答案 0 :(得分:0)
使用功能签名VCS_GetCurrentIsAveraged(KeyHandle,NodeId, short* pCurrentIsAveraged, pErrorCode)
要求您使用不安全的代码,如果您不熟悉C#,则应避免使用。看起来像是C型API的p / invoke包装器。
就目前而言,您需要像这样(从一个不安全的块中)调用它(如果在堆栈上恰好分配了currentIsAveraged,则可能不需要fixing
)
short currentIsAveraged = 0;
double current;
fixed (short* pCurrentIsAveraged = ¤tIsAveraged) {
current = VCS_GetCurrentIsAveraged(KeyHandle,NodeId,pCurrentIsAveraged, pErrorCode);
}
bool isCurrentAveraged = (currentIsAveraged != 0);
如果您可以控制VCS_GetCurrentIsAveraged
的p / invoke定义,则可以更改该签名以使用ref short pCurrentIsAveraged
而不是short* pCurrentIsAveraged
。这将使您可以使用这种方法(不需要不安全的代码):
short currentIsAveraged = 0;
double current;
current = VCS_GetCurrentIsAveraged(KeyHandle,NodeId,ref currentIsAveraged, pErrorCode);
bool isCurrentAveraged = (currentIsAveraged != 0);
您可以通过在该值上使用[Out]
属性来进一步优化p / invoke签名,以告知封送编组跳过可能不需要的副本,还可以建议编译器将其视为{{1} }而不是使用bool
来回切换,但这都是高级的东西。如果您对此感兴趣,请查看short
名称空间。