zoukankan      html  css  js  c++  java
  • VS2010 C++创建、调用DLL图解

          以前做Java,这一段在捣鼓一个C++的项目,需要调用其他项目组做的DLL文件,现将创建和调用DLL的方法和步骤记录如下。

      一、创建DLL

            1、新建项目: Visual C++ -> Win32项目,名称:CnBlogsDLL

    点击完成,进入下一步。

    注意不要点完了按钮,点击下一步。

    选中DLL单选框,然后点击完成。这样DLL项目的创建工作就基本结束了。

            2、新建头文件:CommStruts.h

    #pragma once

    // 学生构造体
    typedef struct {
    // 学生名称
    char Name[8];
    // 学生年齢
    int Age;
    } Student;

            3,新建源文件:ShowStudentInfo.cpp

    #include "StdAfx.h"
    #include <iostream>
    #include " CommStruts.h "

    using namespace std;

    // 输出学生信息
    int ShowStudentInfo(Student * stud){
    // 输出学生姓名
    cout<<"Name : "<<stud->Name<<endl;
    // 输出学生年龄
    cout<<"Age : "<<stud->Age<<endl;
    // 返回学生年龄
    return stud->Age;
    }

            4、新建模块定义文件:

    点击追加,然后输入如下代码:

    LIBRARY CnBlogsDll
    EXPORTS

    ShowStudentInfo

    LIBRARY是模块定义文件必须的一部分,它告诉链接器(linker)如何命名你的DLL。EXPORTS也是模块定义文件必须的一部分,这部分使得该函数可以被其它应用程序访问到并且它创建一个导入库。当你生成这个项目时,不仅是一个.dll文件被创建,而且一个文件扩展名为.lib的导出库也会被创建。EXPORTS后面列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用)。

            5、最后编译,生成CnBlogsDLL.dll和CnBlogsDLL.lib文件 

      二、调用DLL

            1、创建CLR控制台应用程序:ExecutDll。

    当然,创建其他的应用程序也是可以的,这里只是举例说明。

            2、添加已有项目CommStruts.h,此文件是上面个创建DLL是建立的构造体文件。

            3、在main方法中添加如下代码:

    // 加载DLL
    HINSTANCE hInstance = LoadLibrary("CnBlogsDLL.dll");
    // 定义显示学生信息的方法
    typedef int (*ShowStudentInfo)(Student * );

    // 取得DLL中先生学生信息的方法,并映射成本地的方法
    ShowStudentInfo showStudentInfo = (ShowStudentInfo)GetProcAddress(hInstance, "ShowStudentInfo");
    // 创建学生信息
    Student stud;
    // 初始化
    memset(&stud, 0x00, sizeof(Student));
    stud.Age = 100;
    memcpy(stud.Name,"WGC",sizeof(stud.Name));

    // 执行显示学生信息的方法
    int age = showStudentInfo(&stud);

                这里使用的是动态加载DLL的方法。

            4、将编译完成的CnBlogsDLL.dll拷贝到ExecutDll工程的Debug目录下。如果使用静态加载DLL的方法,还需要拷贝CnBlogsDLL.lib文件。

            5、编译运行。运行结构如下图:

     

      三、小结

            调用DLL的时候,有可能会出现"FatalExecutionEngineError"的错误,极有可能是参数造成的,尤其是使用指针的时候,更需要多加小心。

            这里只是简单的介绍了创建和调用DLL的部分内容。希望能对DLL初学者有所帮组。

    作者:孤旅者
    如果您对本文有意见或者建议,欢迎留言,哪怕是拍砖(^_^)!
    欢迎转载,请注明出处!
    感谢您的阅读,请关注后续博客!
    共享视频教程请访问:JAVA 高级软件工程师视频
  • 相关阅读:
    影子的宽度&&盒子的个数
    【NOIP2017】【洛谷3958】奶酪cheese(并查集)(dfs)
    【USACO Jan 2011】【洛谷P3008】道路和航线 Roads and Planes
    增肥计划
    【洛谷1379】八数码
    【洛谷1985】【USACO07OPEN】翻转棋
    【NOI1995】极值问题
    车的放置
    【AtCoder
    Design Tutorial: Inverse the Problem
  • 原文地址:https://www.cnblogs.com/gulvzhe/p/2396230.html
Copyright © 2011-2022 走看看