下面通过例子简单介绍dev c++ 是如何开发lib和dll并使用的。关于dev c++ 我使用的版本是5.11,单击下载:

devEco如何创建java项目 dev建立项目_C语言

一、创建项目结构(文件夹)

为了使整个项目例子看起来比较易于管理,下面我们在D盘创建文件夹d:/gcc,在gcc文件夹里我们分别创建include和lib、dll文件夹。

运行:cmd

分别执行下面命令:

>d:

>mkdir gcc

>cd gcc

>mkdir include,lib,dll

如下图示:

devEco如何创建java项目 dev建立项目_lib_02

二、创建lib项目(Dev C++制作)

打开Dev C++,打开File——>New——>Project,如下图示:

devEco如何创建java项目 dev建立项目_C_03

创建lib项目,并保持在d:/gcc/lib文件夹里。

devEco如何创建java项目 dev建立项目_lib_04

可以看到d:/gcc/lib下有

devEco如何创建java项目 dev建立项目_Dev C++开发lib和dll_05

myMath.dev文件是Dev C++管理项目的文件,是目录管理配置文件。

1)我们创建一个add.c文件,存储在lib里


#include
   
   
    
    
int add(int a,int b){
	return a + b;
}


2)创建myMath.h文件,存储在include里


extern int add(int a,int b);


3)编译后,在lib下看到了两个文件


.o文件是目标文件


.a文件就是lib文件


如下:




devEco如何创建java项目 dev建立项目_lib_06



三、创建一个测试项目

创建test项目如下:

devEco如何创建java项目 dev建立项目_C语言_07

1)创建一个main.c文件如下:


#include 
   
   
    
    
#include 
    
    
     
     
#include
     
     
      
       
int main(int argc, char *argv[]) {
	printf("%d",add(2,2));
	return 0;
}


可以看到,在main.c源代码里用到了函数add,还导入了myMath.h头文件。


2)添加项目设置


如果不做这一步,编译会找不到add函数,所以这一要设置项目选项,添加myMath.h和add.a


如下:



devEco如何创建java项目 dev建立项目_lib_08




devEco如何创建java项目 dev建立项目_C语言_09



3)编译运行




devEco如何创建java项目 dev建立项目_C_10




四、创建dll项目


1)创建dll



devEco如何创建java项目 dev建立项目_C_11



创建后就有两个文件:dll.h和dllmain.c,dll.h文件就是说明文件,dllmain.c是源程序文件,其中我们删去多余的代码,如下:


#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif

DLLIMPORT void HelloWorld();

#endif


/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include "stdio.h"
#include 
    
    
     
     

DLLIMPORT void HelloWorld()
{
	printf("hello world\n");
}


编译生成dll文件,生成的文件以项目名称命名,为myString.dll。编译的时候会有警告,如下:



devEco如何创建java项目 dev建立项目_C_12



这个警告就是说没有调用dll的应用程序。而且给出了添加的方法,在Execute——>Paremeters指定。我们指定以上创建的test工程的main.c函数作为调用myString.dll的调用程序,再次编译就不会有这个警告了。如下设置:



devEco如何创建java项目 dev建立项目_C语言_13



编译后可以在dll的工程下看到如下:



devEco如何创建java项目 dev建立项目_C_14



其中myString就是我们要用的dll(动态链接库)。


2)使用dll


在test工程中的main.c里这样来使用myString.dll,如下:


#include 
    
    
     
     
#include 
     
     
      
      
#include
      
      
       
        
#include
       
       
        
         
int main(int argc, char *argv[]) {
	printf("%d\n",add(2,2));
	HelloWorld();
	getchar();
	return 0;
}



devEco如何创建java项目 dev建立项目_C_15




devEco如何创建java项目 dev建立项目_Dev C++开发lib和dll_16



因为我们设置include是在D:\gcc\include下,所以讲dll.h复制进去。


然后再编译的时候clean一下,Execute——>clean。


3)只编译通过,看到生成test.exe


4)运行


双击test.exe出错,

devEco如何创建java项目 dev建立项目_C语言_17



找不到myString.dll,这时我们将myString.dll拷贝到test.exe同级目录下,双击执行如下:



devEco如何创建java项目 dev建立项目_devEco如何创建java项目_18



为什么编译的时候需要明确制定dll路径,而执行的时候就没有找到此路径呢?


五、例子下载



六、a(lib)和dll的区别


将myMath.a删掉,再双击test.exe,发现还能执行。


再将myString.dll删掉,双击test.exe,发现报错



devEco如何创建java项目 dev建立项目_devEco如何创建java项目_19



说明.a文件是编译后就已经在exe中,而dll中的函数不在exe中,需要执行exe时动态找到被执行。这就是.a和dll的区别。


.a称为静态库


dll称为动态链接库。