zoukankan      html  css  js  c++  java
  • vs2010 C++创建和使用动态链接库(dll)

    一、用C++创建动态链接库项目: 
    1
    、打开Microsoft Visual Studio 2010,选择File->New->Project。 
    2
    、在NewProject中选择Installed Templates->Visual C++->Win32。 
    3
    、选择Win32 Console Application,设置名称:simpledll,设置解决方案名:zdddll。 
    4
    、单击OK,在出现的Win32 Application Wizard的Overview对话框中点击Next。 
    5
    、在ApplicationSettings中,选择Application type下的DLL。 
    6
    、勾选Additional options下的Emptyproject。 
    7
    、单击Finish创建项目。 

    向动态链接库添加类: 
    1
    、添加新类头文件。右键单击simpledll项目,Add->New Item,选择Header File(.h),设置名称为simpledll,单击Add。 
    2
    、添加新类源文件。右键单击simpledll项目,Add->New Item,选择C++ File(.cpp),设置名称为simpledll,单击Add。 
    3
    、为新类添加内容。内容如下: 

    头文件simpledll.h: 

    <span style="font-size:14px;">//------------------ simpledll.h ---------------- 
    #pragma once; //编译器相关的,保证头文件只被编译一次。
    
    //该宏完成在dll项目内部使用_declspec(dllexport)导出 
    //在dll项目外部使用时,用_declspec(dllimport)导入 
    //宏DLL_IMPLEMENT在simpledll.cpp中定义 
    #ifdef DLL_IMPLEMENT 
    #define DLL_API _declspec(dllexport) 
    #else 
    #define DLL_API _declspec(dllimport) 
    #endif 
    
    namespace zdd 
    { 
    
    //导出类 
    class DLL_API SimpleDll 
    { 
    public: 
    SimpleDll(); 
    ~SimpleDll(); 
    int add(int x, int y); //简单方法 
    }; 
    }</span>

    源文件simpledll.cpp: 

    <span style="font-size:14px;">//------------------ simpledll.cpp---------------- 
    //注意此处的宏定义需要写在#include "simpledll.h"之前 
    //以完成在dll项目内部使用__declspec(dllexport)导出 
    //在dll项目外部使用时,用__declspec(dllimport)导入 
    #define DLL_IMPLEMENT 
    #include "simpledll.h" 
    namespace zdd 
    { 
    SimpleDll::SimpleDll() 
    { 
    } 
    SimpleDll::~SimpleDll() 
    { 
    } 
    int SimpleDll::add(int x, int y) 
    { 
    return x+y; 
    } 
    
    } </span>

    4、完成后点击Build->Build Solution,生成解决方案。可在~zdddllDebug下查看生成的simpledll.libsimpledll.dll.文件。 

    二、创建引用动态链接库的C++应用程序: 
    1
    、选择File->New->Project。 
    2
    、在NewProject中选择Installed Templates->Visual C++->Win32。 
    3
    、选择Win32 Console Application,设置名称:usesimpledll。选择Add to solution。 
    4
    、单击OK,在出现的Win32 Application Wizard的Overview对话框中点击Next。 
    5
    、在ApplicationSettings中,选择Application type下的Consoleapplication。 
    6
    、取消Additional options下的Precompiledheader,勾选Empty project。 
    7
    、单击Finish创建项目。 

    在控制台应用程序中使用类库的功能: 
    1
    、为控制台应用程序添加main.cpp。右键单击usesimpledll项目,Add->New Item,选择C++ File(.cpp),设置名称为main,单击Add。 
    2
    、为main.cpp添加内容。如下所示: 

    <span style="font-size:14px;">//------------------ main.cpp ------------------- 
    #include "..includesimpledll.h"  //将生成的simpledll.h放于新建的include目录下
    using namespace zdd; 
    #include <iostream> 
    using namespace std; 
    
    int main(char argc, char **argv) 
    { 
    cout << "----------------------"<<endl; 
    SimpleDll sd; 
    cout << "sd.add: 3+5=" <<sd.add(3, 5)<<endl; 
    
    SimpleDll *psd = new SimpleDll; 
    cout << "psd->add: 5+5="<< psd->add(5, 5)<<endl; 
    
    cout << "----------------------"<<endl; 
    cout << "please press Enterexit."<<endl; 
    getchar(); 
    return 0; 
    } </span>

    3.在工程目录下建立Include目录,将动态链接库的那个头文件拷入。建立lib目录,将生成的那个.lib文件拷入。然后将生成的.dll文件拷入生成.exe文件的那个目录(一般是项目下的Debug下,点生成解决方案才会生成次目录)。 

    4.程序中要包含那个头文件,注意路径要写正确。Include “..Includesimpledll.h”,或者右击工程,property,Configuration Properties,c/c++,General,在AdditionalInclude Directories中加入“;..Include”,这样包含头文件时直接写头文件名,不需要考虑路径,因为当在工程目录下找不到文件时,就会从添加的那个目录查找文件。 

    5.添加.lib文件 
    右击工程,property,Configuration Properties,Linker,Input,在AdditionalDependencies中编辑,添加.lib路径(一般是..libxxxxx.lib)。 


    另外,lib引用有两种方法: 
    1.#pragma comment(lib,”opengl32.lib”) 
    2.选择project–> XX properties… –> linker –> Input –> Additional dependences,在其中加入lib文件名即可。 

    总结: 
    首先建立生成DLL的工程,生成.dll,.lib文件。需要用到的还有.h文件。 
    建立应用DLL的工程。要包含头文件,把3个文件拷入相应的目录。 
    在附加依赖项Additional Dependencies中添加.lib的路径,告诉程序调用的外部导入函数的地址,否则找不到函数,链接出错。 

     

  • 相关阅读:
    gulp的使用
    Js中call(),apply()的使用
    HTML中<meta>标签的使用
    字符串及数组常用方法
    css—transform
    《Java设计模式》——适配器模式
    全文检索工具包Lucene以及企业及应用Solr的学习(二)—— solr中edismax用到的Query Function以及java扩展
    全文检索工具包Lucene以及企业及应用Solr的学习(一)
    最近发现服务器发生了一些问题
    TxT读取写入
  • 原文地址:https://www.cnblogs.com/peterYong/p/6556549.html
Copyright © 2011-2022 走看看