首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ MEX与C MEX的区别

C++ MEX与C MEX的区别
EN

Stack Overflow用户
提问于 2018-05-22 12:59:32
回答 1查看 2K关注 0票数 4

我用C++编写了一个与服务器和客户端的TCPIP套接字连接,它在VisualStudio中运行得很好。现在,我想使用C++ -客户端在MATLAB/Simulink通过MEX和以后的S-函数。我发现了两种关于MEX的描述-档案。

  1. C++ MEX文件应用程序只为C++
  2. C/C++ MEX文件 C/C++

现在我很困惑,哪一个才是最合适的。我用第二个程序编写了一些简单的程序,但总是遇到数据类型方面的问题。我认为,这是因为给出的示例和函数只适用于C,而不是针对C++。

我很感激你的帮助!非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-05-22 13:42:16

的差异:

  1. 描述在第二个链接中的C接口要老得多(我早在1998年就使用了这个接口)。您可以使用这个接口创建一个MEX文件,并让它在大量不同版本的MATLAB上运行。您可以使用它的C以及C++代码。
  2. 描述在第一个链接中的C++专用接口在MATLAB R2018a中是新的(操纵MATLAB数组的C++类是在R2017b中引入的,但编写MEX文件的能力在R2018a中是新的)。MEX-使用此接口编写的文件不会在以前版本的MATLAB上运行。 另外,这个接口(最后!)允许创建共享数据副本、就地操作等(我们多年来一直要求的东西,但他们不想投入旧的C接口,因为他们担心这对普通的MEX文件编写者来说太复杂了)。

需要注意的另一个更改:

在R2018a中,MATLAB还改变了复杂数组存储在内存中的方式。在较早版本的MATLAB中,真实和虚构的组件存储在单独的内存块中。在R2018a和on中,它们存储在相同的内存块中,其方式与您可能在自己的代码中使用的方式相同。

这会影响MEX-文件。!如果你的MEX文件使用复杂的数据,它需要用MATLAB存储它们的方式来读取和写入它们。如果您运行为MATLAB的旧版本编译的MEX文件,或者使用R2018a中当前的默认构建选项编译MEX文件,那么在传递给MEX文件之前,将一个复杂的数组复制到旧的存储模型中。mex命令-R2018a的一个新的编译选项将创建MEX-文件,这些文件将在新存储模型中传递数据。但这些MEX-文件将不兼容以前的版本的MATLAB。

如何选择?

  • 如果您需要您的MEX-文件运行在最新的R2018a之前的MATLAB版本,使用旧的C接口,您没有选择。
  • 如果您想在C中编程,请使用旧的C接口。
  • 如果您需要使用复杂的数据,并且不想承担副本的成本,那么您需要分别针对R2018a和更新,以及R2017b和更早版本。您需要为这两个“平台”编写单独的代码。旧版本只能以C接口为目标。对于较新的版本,您可以使用任何一个接口。
  • 如果您欣赏现代C++的优势,并希望利用它们,并且只针对最新和最伟大的MATLAB版本,那么使用新的C++接口。我还没有试过它,但是从文档来看,它看起来设计得很好。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50468364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档