在Matlab中调用库函数时会出现奇怪/奇怪的字符

时间:2014-02-20 04:29:57

标签: c matlab compiler-construction shared-libraries

我正在使用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。

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

1 个答案:

答案 0 :(得分:1)

似乎库期望字符串为零终止,就像C中的字符串一样。您可以尝试使用int8(['Laser_On', char(0)])。实际上,reference表示你的数组被传递为char *表示的C,指向字符串第一个字符'L'的指针。您可以更简洁地编写int8

,而不仅仅使用int8(char(['Laser_On', 0]))

出现奇怪的字符是因为库中的记录器会一个接一个地打印一个字符,直到达到零字节。因此,在您的情况下,行为变得不确定,并且您有记录器打印那些奇怪的字符,直到它偶然达到零。