1. 程式人生 > >codeblocks中建立和呼叫動態連結庫(dll)

codeblocks中建立和呼叫動態連結庫(dll)

一、建立C語言動態連結庫

1.建立。

File->New->Projects->Dynamic Link library->Go

給專案命名為:Dynamic library

刪除專案中的main.c和main.h重新新增一個simple.c和simple.h

修改simple.h中的程式碼為:

#ifndef SIMPLE_H_INCLUDED
#define SIMPLE_H_INCLUDED

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif // __cplusplus

#include <windows.h>

EXPORT  int pow2(int a);
EXPORT  void upstr(char *str, char *s);

#endif // SIMPLE_H_INCLUDED

修改simple.c中的程式碼為:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "simple.h"

int pow2(int a)
{
    return a*a;
}

void upstr(char *str, char *s)
{
    int i;
    for(i = 0; i < strlen(str); i++)
    {
        if(str[i] >= 'a' && str[i] <= 'z')
            s[i] = str[i] - 'a' + 'A';
        else
            s[i] = str[i];
    }
    s[i] = '\0';
}

2.編譯(Build)。

編譯完成後找到該project的的目錄檔案,開啟Dynamic library/bin/Debug 這時可以看到生成的libDynamic library.a 、 Dynamic library.dll 、libDynamic library.def檔案。

二、呼叫動態連結庫

1.建立win32專案

File->New->Projects->Win32 GUI project->Go

給專案命名為:test_dll

刪除專案中的main.cpp重新新增一個test_dll.cpp檔案,然後再新增一個simple.h檔案,並把上面simple.h中的程式碼複製到現在這個simple.h中。

修改test_dll中的程式碼為:

#include <windows.h>
#include "simple.h"

int APIENTRY WinMain(HINSTANCE h1,HINSTANCE h2,LPSTR l,int n)
{
    int x = 2;
    char str[30]={"Dynamic library _win32"};
    int t = pow2(x);
    char *s = (char*)malloc(sizeof(strlen(str)));
    upstr(str, s);
    if(t == 4)
        MessageBox(NULL, s ,TEXT("動態連結庫測試"), MB_OK);
    else
        MessageBox(NULL, TEXT("error!!!") ,TEXT("動態連結庫測試"), MB_OK);
    return 0;
}

2.新增libDynamic library.a庫檔案

通常, Codeblocks並不知道庫檔案被使用和它的位置,我們必須宣告庫檔案,讓它在連結的時候不會出錯。

選擇選單Settings->Compiler->Linker settings->Add 新增libDynamic library.a庫檔案。


除此之外,還需要把編譯生成的Dynamic library.dll檔案複製到該project的Debug目錄下,(即複製到:Dynamic library/bin/Debug目錄下)。

3.編譯執行

新增完成後就可以編譯運行了,執行結果如下。


至此,就完成了動態連結庫的建立和呼叫。

注意:dll與lib的呼叫有一些差異。對於dll的呼叫,一定要注意滿足:

  1. 在測試程式的工程中要加入DLL輸入庫。(即.a庫檔案)
  2. 在測試程式中包含DLL標頭檔案。(#include ".h")
  3. 在適當的目錄中放置DLL庫。(部落格中放置在與工程的.exe檔案同目錄下)