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 #include <windows.h> EXPORT int pow2(int a); EXPORT void upstr(char *str, char *s); #endif
|
修改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.编译运行
结果如下图: