MATLAB-MATLAB 32位和64位之间的交互

时间:2019-07-11 16:02:17

标签: matlab dll ipc 32bit-64bit

问题

我有用MATLAB编写的两个工具(我不是作者):

  1. 第一个允许我从SQL数据库中检索一些数据,但是它只能在 MATLAB 64位(我有MATLAB 2016b 64位)上工作。
  2. 第二个使用从第一个工具获取的数据,并通过 在32位系统上编译的DLL,它会得到一些输出。如前所述 该工具仅适用于32位MATLAB (我拥有32位MATLAB 2013a)。

我想做的是:

  1. 在64位MATLAB中从SQL获取数据
  2. 以某种方式“发送”到MATLAB 32bit
  3. 在MATLAB 32bit上运行该工具
  4. 将MATLAB 32位的输出“返回”到MATLAB 64位

我知道可以使用IPC机制找到解决方案,但是我不确定如何找到它们或如何在MATLAB中使用它们。有没有人曾经用过这种东西?

查看MATLAB文档,我发现可以创建 COM对象,但是我不确定如何使用它在MATLAB 32bit中运行某些功能。

解决方案

如下面的@nekomatic所建议的,如果我以建议的方式运行代码,但从下面的系统命令中排除-automatic,则一切对我都有效。 最终系统命令的格式为

system('"C:\path\to\R2013a\matlab.exe" -wait -r "mycommand; exit"')

mycommand是一个MATLAB脚本,用于加载输入文件,先执行某些操作,然后保存输出文件。

1 个答案:

答案 0 :(得分:1)

如果您不需要快速执行此操作,则最简单的方法可能是:

  • 将来自64位MATLAB的数据另存为.mat文件
  • 使用system命令启动32位MATLAB实例
  • 在32位MATLAB中运行一个脚本,该脚本从文件中读取数据,对其进行处理并保存
  • 将结果读回到您的64位程序中。

例如64位代码(不包括错误处理,当前文件夹设置等)可能看起来像这样:

delete result.mat % Delete any result from the previous run
save(data.mat, '-v7.3') % usually best to specify the .mat format to use
system('"C:\path\to\R2013a\matlab.exe" -automation -wait -r "mycommand; exit"')
processedData = load('result.mat')

其中mycommand是您的MATLAB R2013a脚本,该脚本从data.mat读取数据,进行处理并将结果保存在result.mat中。

有关R2013a here(假设Windows)的启动选项和有关R2016b heresystem命令的更多数据。您可能需要使用Mathworks帐户登录才能查看旧版本的文档,但是如果有问题,只需查看各自MATLAB安装中的帮助即可。