codeblocks中创建和调用动态链接库(dll)
一、创建C语言动态链接库
1.建立
新建Dynamic Link library并命名。(此处命名为dlltest)
删除项目里的main.cpp和main.h,重新添加了simple.c和simple.h
修改simple.h中的代码为:
| 12
 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
 
 #include <windows.h>
 
 EXPORT  int pow2(int a);
 EXPORT  void upstr(char *str, char *s);
 
 #endif
 
 | 
修改simple.c中的代码为:
| 12
 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中的代码为:
| 12
 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.编译运行
结果如下图:
