Windows下用Codeblocks建立一个最简单的DLL动态链接库
2015-01-14 09:11
393 查看
来源:http://hi.baidu.com/hellosim/item/9ae4317168f4a74bee1e53cb
建立一个最简单的只有一个get_id() 函数的DLL库
一、创建C语言动态链接库
1.新建一个动态库的工程
File - New - Project - DLL - Go
新建的工程原来的main.cpp和main.h删除,新建两个文件simple.h, simple.c添加进工程
注意默认是cpp文件,我们做C库,要用C文件
simple.h
#ifndef SIMPLE_H_INCLUDED
#define SIMPLE_H_INCLUDED
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
int DLL_EXPORT get_id(void);
int DLL_EXPORT add(int,int);
#endif // SIMPLE_H_INCLUDED
[b]simple.c[/b]
#include "simple.h"
int DLL_EXPORT get_id(void)
{
return 10;
}
int DLL_EXPORT add(int x,int y)
{
return x+y;
}
然后编译,成功后在bin\Debug目录下生成3个文件:libsimple.dll.a, simple.dll,libsimple.dll.def
二、动态链接库调用
1、隐式调用
1)建立一个test的工程File - New - Project - Console application - Go - 选择 c删除main.h,把库的test.h复制到工程中,现在就有main.c 和test.h
main.c
#include <stdio.h>
#include "simple.h"
int main()
{
printf("id = %d\n", get_id() );
printf("id = %d\n", add(1,2) );
system("pause");
return 0;
}
simple.h跟上面一样
2)把dll库添加到工程中
将刚刚生成的两个文件libsimple.a, libsimple.dll复制到test工程的bin\Debug目录下
Project - Build options - 左上角默认是Debug,不选这个,选上面那个test - Linker settings - Add 选择 bin\Debug\libsimple.dll.a - 确定,编译成功即可。
2、显示调用
1)建立一个test1的工程File - New - Project - Console application - Go - 选择 编辑main.h,
main.c
#include <stdio.h>
#include <windows.h>
typedef int(*lpGet_id)(void); //定义函数类型
typedef int(*lpAdd)(int,int); //定义函数类型
HINSTANCE hDll; //DLL句柄
lpGet_id get_id;
lpAdd add;
int main()
{
hDll = LoadLibrary("simple.dll"); //加载 dll
get_id = (lpGet_id)GetProcAddress(hDll, "get_id");//通过指针获取函数方法
add = (lpAdd)GetProcAddress(hDll, "add");//通过指针获取函数方法
printf("id = %d\n", get_id() );//调用函数
printf("id = %d\n", add(1,2) );//调用函数
FreeLibrary(hDll);//释放Dll句柄
system("pause");
return 0;
}
simple.h跟上面一样
2)把dll库添加到工程中
将刚刚生成的两个文件libsimple.dll复制到test工程的bin\Debug目录下
编译成功即可。
相关文章推荐
- Windows下用Codeblocks建立一个最简单的DLL动态链接库
- 简单dll动态链接库的建立和应用
- VB无所不能之五:建立“标准”DLL动态链接库文件(1) 推荐
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- QT程序发布的一个问题:无法定位程序输入点与动态链接库QtCore4.dll
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 使用c++开发excel插件 (3.4、编写一个简单的动态链接库)
- Code::blocks 下用_beginthreadex创建一个简单的线程
- vs2005中动态i链接库DLL的一个简单例子
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 一个简单的模板系统的实现(动态载入DLL)
- Windows 下java调用C++ dll动态链接库
- VB无所不能之五:建立“标准”DLL动态链接库文件(2) 推荐
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- C++做一个真正动态链接的DLL的做法
- C++做一个真正动态链接的DLL的做法
- windows下的动态链接问题(.dll文件的编写与调用)
- .NET不用代码生成器自己写一个生成Code的DLL 自动动态生成三层架构(一)概况
- 动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看)