codeblocks中创建和调用动态链接库(dll)

scorlw 发布于

codeblocks中创建和调用动态链接库(dll)

一、创建C语言动态链接库

1.建立

新建Dynamic Link library并命名。(此处命名为dlltest)

删除项目里的main.cpp和main.h,重新添加了simple.c和simple.h

修改simple.h中的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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中的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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.编译

编译完成后找到该project的目录文件,打开dlltest\bin\Debug文件夹,可以看到dlltest.dll,libdlltest.a和libdlltest.def三个文件。

二、调用动态链接库

1.建立

创建win32项目,命名为test_dll.

删除项目中的main.cpp重新添加一个test_dll.cpp文件,然后再添加一个simple.h文件,并把上面simple.h中的代码复制到现在这个simple.h中。

修改test_dll中的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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.添加库文件

通常,Codeblocks并不知道库文件被使用和它的位置,我们必须声明库文件,在它链接的时候不会出错。

选择菜单:设置→编译器→链接器设置→添加之前生成的libdlltest.a库文件。

除此之外,还需要把编译生成的dlltest.dll文件复制到该project的Debug目录下,(即复制到:test_dll\bin\Debug目录下)。

3.编译运行

结果如下图:

thX6k4.png