久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C/C++(2)VS2015生成并使用自定義動(dòng)態(tài)庫(kù)dll/靜態(tài)庫(kù)lib

 imelee 2017-09-24

動(dòng)態(tài)庫(kù):

1.新建win32控制臺(tái)應(yīng)用程序DLLTEST,,選中DLL(D)、預(yù)編譯頭(P)、導(dǎo)出符號(hào)(X),、自動(dòng)生成了如下文件:

  //DLLTEST.h文件
  // 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
    // 宏的標(biāo)準(zhǔn)方法,。此 DLL 中的所有文件都是用命令行上定義的 DLLTEST_EXPORTS
    // 符號(hào)編譯的。在使用此 DLL 的
    // 任何其他項(xiàng)目上不應(yīng)定義此符號(hào),。這樣,,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
    // DLLTEST_API 函數(shù)視為是從 DLL 導(dǎo)入的,而此 DLL 則將用此宏定義的
    // 符號(hào)視為是被導(dǎo)出的,。
    #ifdef DLLTEST_EXPORTS
    #define DLLTEST_API __declspec(dllexport)
    #else
    #define DLLTEST_API __declspec(dllimport)
    #endif

    // 此類是從 DLLTEST.dll 導(dǎo)出的
    class DLLTEST_API CDLLTEST {
    public:
        CDLLTEST(void);
        // TODO:  在此添加您的方法,。
    };

    extern DLLTEST_API int nDLLTEST;

    DLLTEST_API int fnDLLTEST(void);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  //DLLTEST.cpp文件
    // DLLTEST.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。
    //

    #include "stdafx.h"
    #include "DLLTEST.h"


    // 這是導(dǎo)出變量的一個(gè)示例
    DLLTEST_API int nDLLTEST=0;

    // 這是導(dǎo)出函數(shù)的一個(gè)示例,。
    DLLTEST_API int fnDLLTEST(void)
    {
        return 42;
    }

    // 這是已導(dǎo)出類的構(gòu)造函數(shù),。
    // 有關(guān)類定義的信息,請(qǐng)參閱 DLLTEST.h
    CDLLTEST::CDLLTEST()
    {
        return;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2.類比著添加自定義的變量,、函數(shù)和類,,具體如下:

  //DLLTEST.h文件
    // 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
    // 宏的標(biāo)準(zhǔn)方法。此 DLL 中的所有文件都是用命令行上定義的 DLLTEST_EXPORTS
    // 符號(hào)編譯的,。在使用此 DLL 的
    // 任何其他項(xiàng)目上不應(yīng)定義此符號(hào),。這樣,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
    // DLLTEST_API 函數(shù)視為是從 DLL 導(dǎo)入的,,而此 DLL 則將用此宏定義的
    // 符號(hào)視為是被導(dǎo)出的,。
    #ifdef DLLTEST_EXPORTS
    #define DLLTEST_API __declspec(dllexport)
    #else
    #define DLLTEST_API __declspec(dllimport)
    #endif

    #include <iostream>

    using namespace std;

    // 此類是從 DLLTEST.dll 導(dǎo)出的
    class DLLTEST_API CDLLTEST {            //導(dǎo)出的類
    public:
        CDLLTEST(void);
        // TODO:  在此添加您的方法。
        int mul(int x, int y);
        double b;
    };

    class DLLTEST_API MyDLL {
    public:
        int a;
        MyDLL();
        int add(int x, int y);
    };

    extern DLLTEST_API int nDLLTEST;        //導(dǎo)出的變量
    extern DLLTEST_API double mydll;

    DLLTEST_API int fnDLLTEST(void);        //導(dǎo)出的函數(shù)
    DLLTEST_API int sub(int x, int y);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  //DLLTEST.cpp文件
    // DLLTEST.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù),。
    #include "stdafx.h"
    #include "DLLTEST.h"


    // 這是導(dǎo)出變量的一個(gè)示例
    DLLTEST_API int nDLLTEST=0;
    DLLTEST_API double mydll = 0.999;

    // 這是導(dǎo)出函數(shù)的一個(gè)示例,。
    DLLTEST_API int fnDLLTEST(void)
    {
        return 42;
    }

    DLLTEST_API int sub(int x, int y)
    {
        return x - y;
    }

    // 這是已導(dǎo)出類的構(gòu)造函數(shù)。
    // 有關(guān)類定義的信息,,請(qǐng)參閱 DLLTEST.h
    CDLLTEST::CDLLTEST()
    {
        b = 0.111;
        return;
    }

    int CDLLTEST::mul(int x, int y)
    {
        return x * y;
    }

    MyDLL::MyDLL()
    {
        a = 555;
        cout << "this is the constructor of my DLL!" << endl;
    }

    int MyDLL::add(int x, int y)
    {
        return x + y;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

3.分別在debug和release模式下生成庫(kù)文件DLLTEST.dll和DLLTEST.lib.
4.新建測(cè)試工程:win32控制臺(tái)應(yīng)用程序Test,將debug(release下同樣)模式下生成的庫(kù)文件DLLTEST.dll復(fù)制到測(cè)試工程目錄下,,
將生成的庫(kù)文件DLLTEST.lib和頭文件DLLTEST.h復(fù)制到測(cè)試工程下的新建目錄DLLTEST下,,添加main.cpp文件,
測(cè)試代碼如下:

    #include <iostream>
    using namespace std;

    #include "DLLTEST\DLLTEST.h"
    #pragma comment(lib,"DLLTEST\\DLLTEST.lib")

    int main() {
        CDLLTEST cd;
        cout << "CDLLTEST -> b = " << cd.b << endl;
        cout << "CDLLTEST -> mul(2, 3) = " << cd.mul(2, 3) << endl;

        MyDLL md;
        cout << "MyDLL -> a = " << md.a << endl;
        cout << "MyDLL -> add(2, 3) = " << md.add(2, 3) << endl;

        cout << "DLL:mydll = " << mydll << endl;
        cout << "DLL:nDLLTEST = " << nDLLTEST << endl;

        cout << "DLL:fnDLLTEST = " << fnDLLTEST() << endl;
        cout << "DLL:sub(2, 3) = " << sub(2, 3) << endl;

        return 0;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

5.運(yùn)行,,輸出如下ok:
CDLLTEST -> b = 0.111
CDLLTEST -> mul(2, 3) = 6
this is the constructor of my DLL!
MyDLL -> a = 555
MyDLL -> add(2, 3) = 5
DLL:mydll = 0.999
DLL:nDLLTEST = 0
DLL:fnDLLTEST = 42
DLL:sub(2, 3) = -1

靜態(tài)庫(kù):

1.新建靜態(tài)庫(kù)工程LIBTEST,,添加代碼如下:

//LIBTEST.h
#pragma once
class LIBTEST
{
public:
LIBTEST();
int add(int x, int y);
~LIBTEST();
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
//LIBTEST.cpp
#include "LIBTEST.h"

LIBTEST::LIBTEST()
{
}

int LIBTEST::add(int x, int y)
{
return x + y;
}

LIBTEST::~LIBTEST()
{
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.分別在debug和release模式下生成庫(kù)文件LIBTEST.lib,將debug下生成的庫(kù)文件修改名字為L(zhǎng)IBTESTd.lib.
3.將庫(kù)文件LIBTEST.lib,、LIBTESTd.lib和頭文件LIBTEST.h拷貝到測(cè)試工程目錄下,,編寫測(cè)試程序

// main.cpp
#include <iostream>
#include "LIBTEST/LIBTEST.h"

#ifdef _DEBUG
#pragma comment(lib, "LIBTEST/LIBTESTd.lib")
#else 
#pragma comment(lib, "LIBTEST/LIBTEST.lib")
#endif // 

using namespace std;

int main() {
LIBTEST lt;
cout << lt.add(1, 2) << endl; 

return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4.分別在debug和release模式下運(yùn)行即ok.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多