找回密码
 注册
Simdroid-非首页
楼主: SCIE

【原创】MATLAB与VC界面混合编程尝试

[复制链接]
smileqiuqiu 该用户已被删除
发表于 2005-5-16 14:45:36 | 显示全部楼层 来自 北京
提示: 作者被禁止或删除 内容自动屏蔽
syq3721 该用户已被删除
发表于 2005-5-16 14:49:15 | 显示全部楼层 来自 黑龙江哈尔滨
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-5-16 17:58:33 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

菜单Project-Settings-Add To Project - Files,选择要加入的文件

顺便回复smileqiuqiu :
如果你只想看一下效果,那么直接执行编译好的程序就行了,如果你想试着自己编译,那么还请你耐心读一下本主题已经发过的帖子,这些东西我不想再重复了。

又:这个编译好的程序可以在MATLAB6.5下正常运行,在MATLAB6.5.1下不能运行,是因为6.5.1的sgl.dll文件与6.5的不一样了。
terrywzf 该用户已被删除
发表于 2005-5-22 10:46:33 | 显示全部楼层 来自 辽宁大连
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-5-23 10:42:23 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

terrywzf,你好,本帖所讲的内容只适合与matlab6.5,matlab7.0中如何做你自己研究一下吧,我没有用过。
发表于 2005-5-23 18:54:26 | 显示全部楼层 来自 江苏南京

Re:【原创】MATLAB与VC界面混合编程尝试

谢谢SCIE的源代码!!

我借此搞清了几个困扰我的问题:)

已经在BCB下实现了Matlab窗口的嵌入。

再次感谢SCIE的源代码!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-5-24 14:58:16 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

我用matcom将编译后的.m文件,与VC下MFC嵌入编程,出现下列错误:不知为什么,请帮帮忙!
--------------------Configuration: moon - Win32 Debug--------------------
Compiling...
d.cpp
g:\matlab6p5\extern\include\cpp\mlmif.h(5) : error C2146: syntax error : missing ';' before identifier '_colonobj'
g:\matlab6p5\extern\include\cpp\mlmif.h(5) : error C2433: 'mwArray' : 'inline' not permitted on data declarations
g:\matlab6p5\extern\include\cpp\mlmif.h(5) : error C2501: 'mwArray' : missing storage-class or type specifiers
g:\matlab6p5\extern\include\cpp\mlmif.h(5) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

moon.exe - 4 error(s), 0 warning(s)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2005-5-25 08:07:16 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

说说你都的具体操作过程吧,包括m代码的编译命令以及VC中做了哪些设置。
发表于 2005-5-25 11:30:44 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

我用ODBC 连接sql数据库调入表Cards,然后打开表读入数据,用matlab

处理读入的数据,就是上面的.m文件,
用mcc -B sglcpp d.m 后,将cpp及其它文件放入目录,加入工程,设置


1.用VC建立相应类型的工程,把第一步中提到的源程序拷贝到工程所

在目录中。
2.选择菜单Tools-Options-在属性页中选择Directories-下拉框

中选择Include Files,在其最后加入
E:\MATLAB6P5\EXTERN\INCLUDE\CPP
E:\MATLAB6P5\EXTERN\INCLUDE
再在下拉框中选择Library Files,在最后加入
E:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
E:\MATLAB6P5\EXTERN\LIB\WIN32
3.选择菜单Project-Settings-属性页Link-下拉列表中选择Input

,在Object/library modules文本框中加入 libmmfile.lib

libmatlb.lib libmx.lib libmat.lib libmatpm.lib  sgl.lib

libmwsglm.lib libmwservices.lib
4.选择C/C++属性页,在下拉列表中选择Preprocessor,在

Preprocessor definitions中加入MSVC,IBMPC,MSWIN
再在下拉框中选择Precomplied Headers,选中Automatic use of

precompiled headers,在其中填入stdafx.h,
在上面提到的Ignore Libraries里加入msvcrt.lib,
编译是通过了,但是运行就没反应!
数据库的连接界面也没有!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-5-25 11:48:19 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

上面我将figure1.fig,    FigureToolBar.fig,    FigureMenuBar.fig也拷到工程目录下了

我也尝试过用matcom编译成 dll 产生柱状图的.m文件,但是

我是先标注,再产生了figure1.fig图,然后打开,将bar图在figure1.fig上画出
matcom解析不了open ,

我就将标注去掉,直接产生bar图,但是图显示不了,我双击柱状图,出现了图

马上是 一闪而过的 Trapped Exception     Stack Overflow的对话框,程序

立即结束,下面是我VC的一段代码,将a[j]里的数据拷入b中,然后处理画出柱状图
  if(s==r[6])
  {
    if(m_pSet->IsOpen())  m_pSet->Close();
    mwArray b;
    b=zeros(k,20);
    for(i=0;i<k;i++)
      for(int j=0;j<20;j++)
        b.r(i+1,j+1)=a[j];
    d(b);
  }
请多多指教!
发表于 2005-5-25 12:59:01 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

一闪而过的 Trapped Exception Stack Overflow的对话框,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2005-5-25 15:38:04 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

用matlab编译的的做法中有没有调用如下初始化函数?
libmmfileInitialize();
libmwsglmInitialize();
mlfHGInitialize(NULL,NULL);

在退出时调用如下函数:
mlfHGTerminate();
libmwsglmTerminate();
libmmfileTerminate();
发表于 2005-5-25 19:16:49 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

初始化时有加在OnInitDialog函数中
libmmfileInitialize();
libmwsglmInitialize();
mlfHGInitialize(NULL,NULL);
退出时不知加在哪里,没有找到Ondestroy()函数,只有一些析构函数
我在~CMoonView()中加入后
mlfHGTerminate();
libmwsglmTerminate();
libmmfileTerminate();
编译是通过了,但是运行就没反应!
我通过编译--->开始调试------->Step  into(F11)
就弹出

Unhandled exception in moon.exe(NTDLL.DLL): 0xC0000005:Access Violation 对话框

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2005-5-25 19:28:31 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

建议你单独做个调用matlab函数库的例子,不要添加数据库的功能,看是否成功。
发表于 2005-5-25 20:16:14 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

我试了一下,VC基本对话框,上面一个按钮,
void CReferenceDlg::OnButton1()
{
  mwArray b;
  b=zeros(9,20);
  f(b);  
}
f.m
function f(b)
for i=1:20
fig1(i)=sum(b(:,i));
end
bar(fig1);
结果还是不行
编译是通过了,但是运行就没反应!
我通过编译--->开始调试------->Step into(F11)
就弹出

Unhandled exception in moon.exe(NTDLL.DLL): 0xC0000005:Access

Violation 对话框
下面是output窗口调试是的信息:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\kernel32.dll', no matching

symbolic information found.
First-chance exception in Reference.exe: 0xC0000005: Access

Violation.
First-chance exception in Reference.exe: 0xC0000005: Access

Violation.
.............
看来我的机子是有问题了!我在别的机子上试一试!
 楼主| 发表于 2005-5-26 08:28:33 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

我刚做的是可以运行的,我用的matlab版本是6.5,可能在6.5.1下有些问题。
另外:
1。添加对消息WM_DESTROY的响应函数,即可得到OnDestroy(),在此函数内添加
mlfHGTerminate();
libmwsglmTerminate();
libmmfileTerminate();
2。请在Project-Settings-General内将Microsoft Foundation Class改为Use MFC in a Static Library
3。在C×××Dlg.cpp文件中包含头文件的语句后面,添加如下语句
#pragma comment(linker,"/force:multiple")

最后附上我做的例子。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-5-26 09:43:18 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

我试了一下,在我的机子上不能运行,一运行就弹出错误报告,
调试结果还是一样
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
First-chance exception in Reference.exe: 0xC0000005: Access Violation.
The program 'F:\My Documents\cpp\Database\Reference2\Debug\Reference.exe' has exited with code 0 (0x0).
我想在其他机子上试一下,但他们的机子只有VC,
我的G:\MATLAB6p5\extern\lib\win32下没有mglarchive.exe,好像以前有,可能
已经双击过了
只有mglinstaller.exe和mwunzipsfx.exe,双击mglinstaller.exe后,

MWUnZipSFX 5.41 of 16 April 2000, by Info-ZIP. Modified by The MathWorks, Inc.
Send bug reports to support@mathworks.com.
replace installer.exe? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
  inflating: installer.exe
replace mglarchive.exe? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
  inflating: mglarchive.exe
MATLAB Math and Graphics Run-Time Library Installer version 1.1.

This application installs the MATLAB Math and Graphics Run-Time Libraries.
These libraries are necessary to run applications built with the MATLAB
Compiler, Math Library, or Graphics Library. Use of this installer and files
installed by it are governed by The MathWorks, Inc. Software License Agreement,
and by the application license for the application with which it was bundled.

Once this installer has finished, you must add the directory <MGRTL>\bin\win32
to your PATH environment variable, where <MGRTL> represents the directory to
which you chose to install the run-time libraries. If you have a MATLAB
directory (from a MATLAB installation) on your PATH, you must add the
run-time libraries directory to the PATH before the MATLAB directory.

多了bin及toolBox目录,bin\win32下有许多dll文件,
请问如何将我的程序拷到其他没装MALTAB机子上调试
 楼主| 发表于 2005-5-26 19:26:05 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

把bin和toolbox目录拷贝到其它机器上,并把你的程序放到bin\win32下面即可。
发表于 2005-5-26 21:19:04 | 显示全部楼层 来自 湖北武汉

Re:【原创】MATLAB与VC界面混合编程尝试

谢谢SICE大侠!

我重装了xp,及其他软件现在可以用mcc -B sglcpp d 编译的方法将代码加入
VC中运行,包括加入数据库连接。

我将我写好的代码编译成功后,将生成的.exe文件(若有图形输出,还要包括

FigureToolBar.fig和FigureMenuBar.fig)拷入

拷mglinstaller.exe和mwunzipsfx.exe到其他没装Matlab的上,,双击mglinstaller.exe

加入bin\win32下面即可执行。
yueyoyo 该用户已被删除
发表于 2005-6-5 08:55:46 | 显示全部楼层 来自 哈尔滨理工大学
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 05:22 , Processed in 0.038342 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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