windows庫的建立和使用:靜態庫+動態庫

來源:互聯網
上載者:User

標籤:靜態庫   動態庫   建立   使用   windows   

windows庫的建立和使用:靜態庫+動態庫

 

一、靜態庫的建立和使用1. 靜態庫建立

(1)首先建立工程test,測試代碼如下:

1) test.h

void test_print();

2) test.cpp

#include "test.h"

#include <stdio.h>

void test_print()

{

     printf("test_print in static lib.");

}

3)右擊工程test:屬性——>配置屬性——>常規——>配置類型:選擇靜態庫lib

4)編譯工程(build),然後會在解決方案裡的Debug下會產生test.lib。

 

2. 使用靜態庫 = lib檔案 + 標頭檔

1)建一個新的工程uselib

2)點擊資源檔——>添加已有項——>加入剛才產生的庫test.lib

3)右擊屬性——>VC++目錄——>包含目錄:將test.h所在目錄添加進來

工程代碼如下:

1)main.cpp

#include "test.h"

#include<stdio.h>

int main()

{

      test_print();

     getchar();

}

調試就能看到調用成功。

 

二、 動態庫的建立與使用1. 靜態載入動態庫

1)建立工程static_load

static_dll.h

//匯出類

class __declspec(dllexport) static_test

{

public:

         void print();

};

//匯出函數

__declspec(dllexport) void static_function();

//匯出對象

extern __declspec(dllexport) static_test  static_ObjTest;

static_dll.cpp

#include "static_dll.h"

#include <stdio.h>

void static_test::print()

{

      printf("static_test::print() in static load dll.\n");

}

void static_function()

{

     printf("static_function in static load dll.\n");

}

static_test  static_ObjTest;

 

 

__declspec(dllexport)表示作為動態庫的匯出項,否則會找不到變數或者函數或者類等。配置類型選擇:動態庫(dll).

 

2)靜態載入的方式使用動態庫

首先建立一個dll.h

//導入類

class __declspec(dllimport) static_test

{

public:

         void print();

};

//導入函數

__declspec(dllimport) void static_function();

//導入對象

extern __declspec(dllimport) static_test  static_ObjTest;

__declspec(dllimport)表明該項是從動態庫匯入的外部匯入項。

建立一個測試工程uselib

main.cpp

#include "dll.h"

#include<stdio.h>

int main()

{

        static_test st;

        st.print();

       static_function();

       static_ObjTest.print();

       getchar();

}

同時需要將static_load.lib和static_load.dll放到同一目錄下,且.lib檔案匯入到資源檔下。

 

2 動態載入動態庫

1. 為區別對待這裡建立工程dynamic_load

dynamic_dll.h

//匯出類

class __declspec(dllexport) dynamic_test

{

public:

        void print();

};

//匯出函數

__declspec(dllexport) void dynamic_function();

//匯出對象

extern __declspec(dllexport) dynamic_test  dynamic_ObjTest;

dynamic_dll.cpp

#include "dynamic_dll.h"

#include <stdio.h>

void dynamic_test::print()

{

         printf("dynamic_test::print() in dynamic load dll.");

}

void static_function()

{

         printf("dynamic_function in dynamic load dll.");

}

dynamic_test  dynamic_ObjTest;

配置類型選擇:動態庫(dll).然後編譯(build)。

 

建立一個工程uselib

#include<stdio.h>

#include<Windows.h>

int main()

{

        HINSTANCE hDLL = LoadLibraryA("dynamic_load.dll"); 

        if(hDLL==NULL)

        {

                FreeLibrary(hDLL);

                return 0;

         }

         typedef void(_stdcall*func)();

         func f;

         f = (func)GetProcAddress(hDLL,"dynamic_function");

        if(f) (*f)();

        getchar();

}

注意我們必須在LoadLibraryA中傳入dll的準確路徑,且若使用char*的路徑,則使用LoadLibraryA,否則若是unicode則使用LoadLibraryW。至於動態匯入類有點麻煩,故在此先不討論。

windows庫的建立和使用:靜態庫+動態庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.