我正在使用MATLAB从外部库调用函数来控制设备, 我遇到的问题是,使用特定的函数,参数不能正确转换,奇怪的字符出现在它的位置。
例如,呼叫:
ERRCODE = calllib ('MEDAQLib','ExecSCmd',1,int8('Laser_On'));
ExecSCmd
中的libfunctionview
个参数定义为ulong,int8Ptr
现在,当我记录这些命令时
ExecSCmd,Enter,instanceHandle = 1,sensorCommand ='Laser_On'“£〜ð' MESensor :: SensorCommand,Enter,this = 0x30c07b50,S_Command = Laser_On'“£~ðErrorMsg:: Error_SetText设置,消息:-14 (ERR_UNKNOWN_SENSOR_COMMAND):Laser_On'“£〜ð
而不是Laser_On'“£~ð
它意味着像其他函数一样显示干净的Laser_On
。它变得更加怪异,有时称这将随机工作,但很少这样做。
使用不同的计算机,使用相同的Matlab版本,相同的编译器,相同的库,但操作系统不同时,会出现类似的问题。 使用的编译器是Windows SDK 7.1,Matlab Version 2012b。
为什么这些奇怪的字符出现在参数中?
答案 0 :(得分:1)
似乎库期望字符串为零终止,就像C中的字符串一样。您可以尝试使用int8(['Laser_On', char(0)])
。实际上,reference表示你的数组被传递为char *
表示的C,指向字符串第一个字符'L'
的指针。您可以更简洁地编写int8
。
int8(char(['Laser_On', 0]))
出现奇怪的字符是因为库中的记录器会一个接一个地打印一个字符,直到达到零字节。因此,在您的情况下,行为变得不确定,并且您有记录器打印那些奇怪的字符,直到它偶然达到零。