c# - 具有多个返回参数的函数
问题描述
我是 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 值输入什么作为返回参数?
谢谢。
解决方案
使用函数签名VCS_GetCurrentIsAveraged(KeyHandle,NodeId, short* pCurrentIsAveraged, pErrorCode)
要求您使用不安全的代码,如果您是 C# 新手,则应避免使用。这看起来像是围绕 C 风格 API 的 ap/invoke 包装器。
就目前而言,您需要像这样调用它(从不安全的块中)(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
,则可以将该签名更改为使用 anref 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
直接而不是来回使用 a short
,但那是所有高级的东西。System.Runtime.InteropServices
如果您对此感兴趣,请查看命名空间。
推荐阅读
- react-native - 为什么 react native 最新版本(0.60.5)不使用 react native cli 在 android 中显示欢迎屏幕?
- php - 无法通过 curl 和 php 完成文件上传
- javascript - 填充底部在生成的文档中不起作用
- javascript - 为什么输出属性时对象返回未定义?
- reactjs - 如何从'react-images'导入FooterCaption?
- python - 将处理器添加到 python 多处理中没有速度增益
- sql - 我想在一个合并表中返回两个表的组合结果
- c++ - 返回 const 值防止移动语义
- java - 将 java map 转换为 scala map 的函数
- laravel - Laravel 路由模型绑定:找不到模型 id 时返回 json 响应