找回密码
 注册
Simdroid-非首页
查看: 747|回复: 12

【讨论】关于Matlab与VC接口的新疑问

[复制链接]
发表于 2004-2-21 13:38:24 | 显示全部楼层 |阅读模式 来自 甘肃兰州
关于接口,我接触的不是很多,在SCIE等兄弟的耐心指导下,做成功过,但是我在CSDN上提过的问题重新又浮现在我的脑海中,各位高手如有知道的,请释疑啊:
http://expert.csdn.net/Expert/topic/2558/2558139.xml?temp=.4163629
那时曾经问过为什么要对接口中函数进行注册,没有人回答,至今我也不知道,因为当时这里的大部分贴友没有提到过接口函数的注册问题,而且一些独立运行的关于Matlab的程序也并没有进行函数注册,照样可以运行成功。
http://matlab.myrice.com/matlab_and_c.htm
即Matlab大观园中有一篇文章又在说这个事情,搞不懂,为什么有《 Matlab 和 C++ 接口中函数注册的实现》这些文章的出现,能解决什么问题?
简而言之,就是函数注册能解决什么问题?不注册有什么后果???
发表于 2004-2-21 16:36:15 | 显示全部楼层 来自 天津

回复: 【讨论】关于Matlab与VC接口的新疑问

Simdroid开发平台
呵呵,总算是看到了关于“函数注册”的东西,虽然那篇文章没有看明白,但至少知道在什么情况下要进行函数注册。
函数注册是在使用某些matlab的数学函数时才需要进行的。像fmin这样的函数由于它的一个参数是另一个函数,fmin需要根据这个参数去调用其实际代表的函数。那么fmin怎么知道如何去调用这个函数呢?所以就需要把这个被调用的函数的相关信息进行注册登记,然后fmin根据登记在案的相关信息去调用这个函数。对于其它函数则不需要这样,由于我没有试过在编译的程序中使用fmin这样的函数所以一直没有遇到过这种情况,也或许我对函数注册的理解有所偏差,但我想大概的意思应该是对的。
   
我对此类问题是比较有兴趣的,我会继续关注这个问题。
发表于 2004-2-21 21:03:39 | 显示全部楼层 来自 天津

回复: 【讨论】关于Matlab与VC接口的新疑问

由m文件编译得到得程序是不需要自己注册的,因为所有的问题都由mcc解决了,只有再直接使用matlab的数学函数库时才会有问题。
如下例:
  
#include "stdafx.h"
#include "matlab.hpp"
  
mwArray f(mwArray x)
{
  return (x^(-3) + sin(x));
}
  
// 对函数 f 进行注册
DECLARE_FEVAL_TABLE
  FEVAL_ENTRY(f)
END_FEVAL_TABLE
  
int main(int argc, char* argv[])
{
  mwArray ret,x1(-10.0),x2(10.0);
  
  ret = fminbnd("f",x1,x2);
   //   如果不对函数 f 进行注册,那么fminbnd不知道如何执行字符串表述的函数"f",如果换成是"sin"或者其它matlab的数学函数库的函数那么就不需要自己注册了。
  
  double *dret = mxGetPr(ret.GetData());
  
  printf("%f\n",*dret);
  
  return 0;
}

评分

1

查看全部评分

 楼主| 发表于 2004-2-21 21:25:45 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

那么请问,这样经过函数注册之后编译的.exe文件能独立于Matlab环境运行吗?
发表于 2004-2-21 22:26:46 | 显示全部楼层 来自 天津

回复: 【讨论】关于Matlab与VC接口的新疑问

能,因为注册只是建立一个字符串函数名与函数地址的映射表,调用的时候根据字符串函数名查找实际的函数地址。这样的做法在MFC里其实是很常见的。
 楼主| 发表于 2004-2-22 10:38:01 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

那么是不是说:
这样经过函数注册之后编译的.exe文件不能独立于Matlab环境运行呢?
发表于 2004-2-22 16:20:08 | 显示全部楼层 来自 湖北武汉

回复: 【讨论】关于Matlab与VC接口的新疑问

应该不行吧
  
今天把这个东西 InstallShield 看了一下,发现解决“m文件转化为c/c++语言文件,VC编译”中 matlab自解库的安装和环境变量注册的问题
  
不知道有没有人试过?
发表于 2004-2-22 17:23:45 | 显示全部楼层 来自 天津

回复: 【讨论】关于Matlab与VC接口的新疑问

是可以脱离matlab环境的,函数注册与matlab本身是无关的,我做的几个例子都是可以脱离的。
 楼主| 发表于 2004-2-23 09:03:55 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

原来那篇文章和我最开始打印的是同一篇文章,照着搬上去有如下错误:
d:\liuyr\c++save\rgfuncmatlab.cpp(4) : fatal error C1083: Cannot open include file: 'matlab.hpp': No such file or directory
Error executing cl.exe.
我想,是不是我没有进行什么设置呢?请SCIE兄明示!!!
发表于 2004-2-23 13:42:21 | 显示全部楼层 来自 天津

回复: 【讨论】关于Matlab与VC接口的新疑问

在VC中
选择:工具--->选择,属性页选择“目录”,在include files里面加入:  
          C:\MATLAB6P5\EXTERN\INCLUDE  
          C:\MATLAB6P5\EXTERN\INCLUDE\CPP  
  注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。  
  在Library files里面加入:  
          C:\MATLAB6P5\EXTERN\LIB\WIN32  
          C:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60  
  注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。
 楼主| 发表于 2004-3-1 15:59:23 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

Compiling...
test.cpp
h:\matlab6p5p1\extern\include\cpp\matmtxif.h(31) : fatal error C1083: Cannot open include file: 'strstream.h': No such file or directory
Error executing cl.exe.
还是有错!不知道咋回事???
 楼主| 发表于 2004-3-1 16:19:14 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

还有,这些操作
==================================
在VC中  
选择:工具--->选择,属性页选择“目录”,在include files里面加入:  
          C:\MATLAB6P5\EXTERN\INCLUDE  
          C:\MATLAB6P5\EXTERN\INCLUDE\CPP  
注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。  
在Library files里面加入:  
          C:\MATLAB6P5\EXTERN\LIB\WIN32  
          C:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60  
注意,根据你的matlab的安装位置的不同,要相应的修改上面的地址。  
==================================
可不可以通过程序实现而不需要每次都这样设置呢???
 楼主| 发表于 2004-3-4 11:23:29 | 显示全部楼层 来自 甘肃兰州

回复: 【讨论】关于Matlab与VC接口的新疑问

一元函数昨天已经做成功一个例子,但是二元函数问题又有问题了,例子就是题目上那个函数注册的例子,做不成功,有没有人知道呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-2 13:58 , Processed in 0.051537 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表