2014-02-20 109 views
1

我正在使用MATLAB从外部库调用函数来控制设备, 我遇到的问题是具有特定函数的参数未正确转换且奇怪的字符出现在它的位置。当在Matlab中调用库函数时出现奇怪/奇怪的字符

例如,调用:

ERRCODE = calllib ('MEDAQLib','ExecSCmd',1,int8('Laser_On')); 

其中ExecSCmd参数在libfunctionview被定义为ulong,int8Ptr

现在,当我登录的命令发生这种情况

ExecSCmd,回车,instanceHandle = 1,sensorCommand ='Laser_On''£〜'' MESensor :: SensorCommand,Enter,this = 0x30c07b50,S_Command = Laser_On'“£〜d ERRORMSG :: Error_SetText集,留言:-14 (ERR_UNKNOWN_SENSOR_COMMAND):Laser_On'“£〜d

相反的Laser_On'“£~ð它的意思是显示一个干净Laser_On像它与其他功能呢。它变得更加怪异,有时称它为随机工作,但这样做的次数很少。

当使用不同的计算机,使用相同的Matlab版本,相同的编译器,相同的库,但操作系统不同时,会出现类似的问题。 使用的编译器是Windows SDK 7.1,Matlab版本2012b。

为什么这些奇怪的字符出现在参数中?

回答

1

看起来库预计该字符串是零终止的,就像C中的字符串一样。您可以尝试使用int8(['Laser_On', char(0)])。实际上,reference表示您的数组按照C指示的char *传递,指向字符串的第一个字符'L'。而不是仅仅使用int8,你也可以写得更精确int8(char(['Laser_On', 0]))

出现奇怪的字符是因为库中的记录器会一个接一个地打印一个字符,直到达到零字节。因此,在你的案例中,行为变得不确定,并且你有记录器打印这些奇怪的字符,直到碰巧为零。

+0

很好解释!我现在知道了。我现在没有机会对此进行测试,但这可能会起作用。只有一件事,我认为函数输入仍然需要Matlab上的整数格式,因此:'int8(char ['Laser_On',0])'应该这样做。如果这个工作很快就会确认。 – DonD

+0

非常感谢您的反馈。如果你发现只有'int8'可以工作,你可以编辑我的答案。 –