DLL发布 matlab代码发布

余生颓废 提交于 2020-05-08 00:21:52

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

运行结果如下: 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!