DLL发布 matlab代码发布

Posted wllwqdeai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DLL发布 matlab代码发布相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/alansss/article/details/81320548

最近需要将写好的matlab代码转成基于OpenCV的代码,然后再封装成dll进行发布。一开始直接看基于OpenCV的dll生成,但是都不太成功,故而先试试没有OpenCV的dll生成。 
主要参考了以下两个网页: 

VS2013生成dll及动态调用: 
https://blog.csdn.net/liu_matthew/article/details/55804710 
vs 无法将参数 1 从“const char *”转换为“LPCWSTR” 解决办法: 
https://blog.csdn.net/u011394598/article/details/80536753

第一步:文件->新建->项目->win32控制台应用程序 项目名称:DLLGenerator 
应用程序类型:DLL 附加项目:空项目 
第二步:在创建的dll工程中编写自己需要编译成dll的函数cpp和头文件h 
dll.h

技术图片
#ifndef DLL_H
#define DLL_H
//h文件
int Add(int a, int b);
int Mul(int c, int d);
#endif
View Code

dll.cpp

技术图片
#include "DLL.h"
//cpp文件
int Add(int a, int b)

    return a + b;


int Mul(int c, int d)

    return c * d;
View Code

第三步:建立dll源文件dllmain.cpp,用来定义应用程序的入口点 
dllmain.cpp

技术图片
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include <windows.h>
BOOL APIENTRY DllMain(
    HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
    )

    switch (ul_reason_for_call)
    
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    
    return TRUE;
View Code

第四步,建立源文件Source.def

技术图片
LIBRARY "DLLGenerator"
EXPORTS
    Add @1
    Mul @2LIBRARY
View Code

第五步:点击编译生成解决方案,显示生成完成。此时debug目录下就会出现.dll文件和.lib文件

VS2013静态使用动态链接文件(使用端) 
由于很多时候我们没有lib文件和h文件,我们可以使用以下方式。 
新建一个win32控制台应用程序的空项目,添加cpp文件,并在程序中加入需要调用的dll文件的路径:

技术图片
#include<iostream>
#include<Windows.h>
#include<time.h>
typedef int(*Dllfun)(int, int);
using namespace std;
int main()

    Dllfun f1,f2;
    HINSTANCE hdll;
    hdll = LoadLibrary("E:\\\\Code\\\\C\\\\DLLGenerator\\\\Debug\\\\DLLGenerator.dll");
    //此处报错的话,右键选择项目->属性->常规->字符集(选择多字节就ok)
    if (hdll == NULL)
    
        FreeLibrary(hdll);
    
    f1 = (Dllfun)GetProcAddress(hdll, "Add");
    f2 = (Dllfun)GetProcAddress(hdll, "Mul");
    if (f1 == NULL)
    
        FreeLibrary(hdll);
    

    int a = f1(4, 10);//加法
    int b = f2(4, 10);//乘法

    cout <<"4+10=" << a << endl;
    cout << "4*10=" << b << endl;

    FreeLibrary(hdll);
    return 0;
View Code

运行结果如下: 

技术图片

 

以上是关于DLL发布 matlab代码发布的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有matlab的labview中使用matlab源代码?

使用 Matlab 运行时无法找到 mclmcrrt*.dll

从点网运行 Matlab 代码

Matlab 编译项目的用户定义配置

MATLAB 代码中使用的 C++ 代码

如何查看从 Matlab 中 Mex 函数使用的 DLL 调用的 printf 的输出?