mfc调用matlab的dll

本文档详细介绍了如何在MFC环境中配置和使用MATLAB编译的DLL进行数学运算。作者首先强调了确保VS在64位环境下运行以匹配MATLAB的64位版本。接着,展示了MATLAB生成DLL的代码和VS MFC项目的配置步骤,包括包含目录、库目录和附加依赖项。虽然目前代码仅实现了数字加法,作者发现了在数组处理上的问题,并通过查阅资料了解到MATLAB数组的索引从1开始。最后,作者分享了遇到的问题和解决思路,以及一些调试和学习心得。
摘要由CSDN通过智能技术生成

环境配置

由于matlab是64位的,所以vs一定要在x64的环境下运行!

matlab加法器法代码

    function C=Addtest(A,B)
                C=A+B;
    end
	

保存文件名为Addtest.m,生成的动态链接库文件如下所示:
在这里插入图片描述
在VS建立mfc项目,选择基于对话框的。
VC++包含目录:
D:\Program Files\MATLAB\R2014a\extern\include\win64
D:\Program Files\MATLAB\R2014a\extern\include
D:\Documents\MATLAB\Addtest
VC++库目录:
D:\Program Files\MATLAB\R2014a\bin\win64
D:\Program Files\MATLAB\R2014a\extern\lib
D:\Program Files\MATLAB\R2014a\extern\lib\win32\microsoft
D:\Program Files\MATLAB\R2014a\extern\lib\win32\lcc
D:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft
D:\Documents\MATLAB\Addtest
C/C++常规:附加包含目录
D:\Program Files\MATLAB\R2014a\extern\include
链接器:输入:附加依赖项
libeng.lib;libmat.lib;libmex.lib;libmx.lib;mclmcrrt.lib;mclmcr.lib;libAddtest.lib
链接器:常规,附加库目录
D:\Program Files\MATLAB\R2014a\extern\lib\win32\microsoft
之后将下列文件加入

代码

还在修改阶段,没有完成数组的计算功能,暂时只完成了数字的计算功能,加法器部分运用了鸡啄米的mfc教程,ID设置如下表:

名字 ID
被加数(static text) IDC_SUMMAND_STATIC
被加数(edit control) IDC_SUMMAND_EDIT
被加数变量名 m_editSummand
加数(static text) IDC_ADDEND_STATIC
加数(edit control) IDC_ADDEND_EDIT
加数变量名 m_editAddend
和(static text) IDC_SUM_STATIC
和(edit control) IDC_SUM_EDIT
和变量名 m_editSum

运行结果:
在这里插入图片描述

// addtionDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "addtion.h"
#include "addtionDlg.h"
#include <cmath>
#include <iomanip>
#include "afxdialogex.h"
#include "targetver.h"
#include "engine.h"                     //使用Matlab引擎需要包含的头文件
#include "mclmcr.h"
#include "mclcppclass.h"
#include "vector"
#include "matrix.h"
#include "iostream"
#include <afxtempl.h>        //mfc数组的
#include <string>
#include "libAddtest.h"      // *.m文件生成

using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
   
public:
	CAboutDlg();

// 对话框数据
	enum {
    IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
   
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
   
	CDialogEx::DoDataExchange(pDX);
}</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Class)是微软公司开发的一套用于开发图形用户界面(GUI)应用程序的类库。而DLL(Dynamic Link Library)是一种包含可被多个程序同时使用的代码和资源的文件。MFC调用DLL可以实现模块化开发,提高软件的复用性和效率。 MFC调用DLL有多种方式,其中一种常见的方式是使用动态链接的方式。首先,在MFC应用程序中引入DLL的.h文件,并在相应的类中声明要调用的函数。然后,在MFC应用程序的初始化过程中,使用LoadLibrary函数加载DLL并通过GetProcAddress函数获取DLL中导出函数的地址。最后,通过函数指针调用DLL中的函数来实现所需的功能。 例如,假设有一个MFC应用程序需要调用一个DLL中的函数来实现加法操作。首先,在MFC应用程序的类中声明函数指针类型和函数原型,如:typedef int (*AddFunc)(int, int);。然后,在初始化过程中加载DLL,并获取相应函数的地址:HMODULE hDll = LoadLibrary(L"mydll.dll"); AddFunc pAddFunc = (AddFunc)GetProcAddress(hDll, "Add");。最后,通过函数指针调用DLL中的函数:int result = pAddFunc(2, 3);。 需要注意的是,MFC调用DLL时还要处理异常情况,比如DLL加载失败或函数获取失败的情况,可以使用try-catch语句来捕获异常并进行相应处理。另外,还需要在使用完DLL后及时进行释放,使用FreeLibrary函数来释放动态链接库的句柄。 综上所述,MFC调用DLL是一种实现模块化开发,提高软件复用性和效率的方式。通过合适的加载和调用方式,可以方便地在MFC应用程序中使用DLL中的函数来实现特定功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值