zoukankan      html  css  js  c++  java
  • 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

    运行结果如下: 

  • 相关阅读:
    Qt Creator 5.0 发布
    Qt编写可视化大屏电子看板系统19-横向柱状图
    Qt开发经验小技巧166-170
    Qt编写安防视频监控系统62-子模块6预置位
    Qt编写可视化大屏电子看板系统18-柱状分组图
    Qt编写安防视频监控系统61-子模块5设备控制
    如果对golang的gin框架中的handler做单元测试
    samba
    内存溢出
    动态规划面试题
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10981354.html
Copyright © 2011-2022 走看看