基于VISA的编程中,ViString与CString之间转换的关系

来源:互联网 发布:怎么下载淘宝卖家版 编辑:程序博客网 时间:2024/05/20 11:35

最近又重新拾起了基于VISA的编程,对Agilent的U2700系列进行控制。

调试过程中想到用自己的界面向仪器发送“文本指令”,手动输入SCPI标准指令,在viPrintf()函数中涉及到了第二个变量需要时ViString的情况。

直接将CString放到函数里是不成功的,

代码如下:

</pre><pre name="code" class="cpp">CString m_TestCommand;viPrintf(instr, m_TestCommand );


提示错误:

错误 1 error C2664: “ViStatus viPrintf(ViSession,ViString,...)”: 无法将参数 2 从“CString”转换为“ViString”

显然,ViString与CString之间还是有区别的,相同情况下,由ViString向CString赋值是不存在问题的,如此看来ViString的格式中比CString要多点东西。

Agilent关于ViString的一些说明,在这里复制一下:

VISA Type Definitions(Parts)VISA Data Type
Definition
DescriptionViString  ViPCharThe location of a NULL-terminated ASCII string.ViPChar ViChar * The location of a ViChar.ViChar                 char          An 8-bit integer representing an ASCII character.

这样看来,其实ViString和CString本质上都是地址无疑,但是为什么会是单向传输呢?


使用了各种强制转换后,各种变形后,还是不行。

不过好在幸好Aglient自己提供的有VISA Assistant,在其中使用指令发送调制,并且显示C Code



由其现实的代码可以发现,每条指令后都会自己附加“\n”

这一看来,会不会是文字指令同样是CString,只不过在发送的的时候作为viPrintf()的第二个参数时附加了“\n”??!!

索性试一下,代码就成了:

CString m_TestCommand;viPrintf(instr, m_TestCommand + "\n");

神奇的事情就发生了!不报错了,编译通过,自己的界面中向一起发送指令控制也成功了!


苦恼了一天的问题,原来就出在这里!所以跟大家分享一下经验!


在这里的第一篇代码博客,希望能看懂吧大家,最好能给紧迫需要的人以帮助!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毛衣洗了掉毛怎么办 身上被螨虫咬了怎么办 裤子上有蜡烛油怎么办 蜡烛滴在地板上怎么办 我用面膜过敏了怎么办 敷面膜过敏肿了怎么办 贴面膜脸过敏了怎么办 隐形船袜总是掉怎么办 车钥匙没电了怎么办 水坐垫干了结晶怎么办 冰垫里面有颗粒怎么办 车上的脚垫丢了怎么办 朔钢窗锁不好使怎么办 8个月孕妇咳嗽怎么办 孕妇7个月咳嗽怎么办 孕妇6个月喉咙痒怎么办 怀孕了咳嗽的厉害怎么办 买衣服眼光太差怎么办 我买衣服没主见怎么办 海澜之家皮带长怎么办 针织衫袖口松了怎么办 宝宝裤子腰大了怎么办 两岁了头发稀少怎么办 孩子抵抗力差爱生病怎么办 三岁宝宝总生病怎么办 冬天穿伴娘服冷怎么办 白衬衣粘了黑毛怎么办 黄衣服钻进黑毛怎么办 单位没给上社保怎么办 轮毂中心孔大了怎么办 钻戒大了怎么办小窍门 shift加f4没反应怎么办 多洗联系不上怎么办 弹力靴筒往下掉怎么办 子宫内膜厚月经停不了怎么办 雪纺衣服有静电怎么办 阿胶糕熬的稀了怎么办 感冒吃了阿胶糕怎么办 身上起湿疹很痒怎么办 身上起小疹子痒怎么办 吊带裙带子断了怎么办