首页 > 解决方案 > Matlab 和 C++ 之间的 .Net 通信

问题描述

我有两个不同的进程,一个在 Matlab 中,一个在 Windows 机器下的 C++ 中。实际上,我正在努力开发它们之间的通信,现在,我正在尝试使用 .net API。

事实上,C++ 有一个主线程,它在输入中获取一组数据,并根据输入(在其他线程中)做一些事情并等待另一个输入。Matlab 的主要任务是自动提供不同的输入,然后返回输出。

这里是简化版:

C++

#include "main.h"
#include <string>
#include <iostream>

std::string m = "";

int main(int argc, char* argv[]) {
    while (true)
    {
        std::cin >> m;
        std::cout << "command: " << m << "\n";
    }
}

产生“myecho.exe”

MATLAB

echoTest = 'myecho.exe';

proc = System.Diagnostics.Process();
proc.StartInfo.FileName = echoTest;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.Start();

proc.StandardInput.WriteLine('test1')
proc.StandardInput.Flush
while proc.StandardOutput.Peek ~= -1
    disp(proc.StandardOutput.ReadLine);
end

pause(1)

proc.StandardInput.WriteLine('test2')
proc.StandardInput.Flush
while proc.StandardOutput.Peek ~= -1
    disp(proc.StandardOutput.ReadLine);
end

pause(1)

proc.StandardInput.WriteLine('test3')
proc.StandardInput.Flush
while proc.StandardOutput.Peek ~= -1
    disp(proc.StandardOutput.ReadLine);
end

不幸的是,Matlab 只能发送第一个输入并收集第一个输出。但是,第二个输入/输出不会产生任何结果(peek = -1)。因此,Matlab 的结果是:

>>command: test1

>> 

您对这种奇怪的行为有任何想法吗?

标签: c++.netmatlab

解决方案


推荐阅读