MATLAB - взаимодействие между MATLAB 32 и 64 бит - PullRequest
0 голосов
/ 11 июля 2019

ПРОБЛЕМА

У меня два инструмента написано в MATLAB (я не автор):

  1. первый позволяет мне получить некоторыеданные из базы данных SQL , но она работает только на MATLAB 64bit (у меня MATLAB 2016b 64bit).
  2. второй использует данные, полученные из первого инструмента и через DLL, скомпилированную в 32-битной системе, он получает некоторые выходные данные.Как уже говорилось, этот инструмент работает только MATLAB 32bit (у меня MATLAB 2013a 32bit).

Я хотел бы сделать следующее:

  1. getданные из SQL в 64-битной MATLAB
  2. каким-либо образом «отправить их» в 32-битную MATLAB
  3. запустить инструмент на 32-битной MATLAB
  4. «вернуть» выходные данные из 32-битной MATLABв MATLAB 64bit

Я знаю, что решение может быть найдено с использованием механизмов IPC, но я не уверен, как их найти или как использовать их в MATLAB.Кто-нибудь когда-нибудь работал с такими вещами?

Просматривая документацию MATLAB, я увидел, что можно создать COM-объект , но я не уверен, как его использовать для запусканекоторые функции в MATLAB 32bit.

SOLUTION

Как подсказывает @nekomatic ниже, у меня все работает, если я запускаю код, как предложено, но исключая -automatic из системной команды ниже.Последняя системная команда имеет вид

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

mycommand - это скрипт MATLAB, который загружает входной файл, что-то делает, а затем сохраняет выходной файл.

1 Ответ

1 голос
/ 12 июля 2019

Если вам не нужна эта операция для быстрой работы, возможно, самый простой способ сделать это:

  • Сохранить данные из 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 здесь (при условии Windows) и о команде system для R2016b здесь .Вам может потребоваться войти в систему с учетной записью Mathworks, чтобы просмотреть документацию для более старых выпусков, но если это проблема, просто обратитесь к справке в соответствующих установках MATLAB.

...