DEV-CPP是一款免费的软件,它的IDE界面是由Dephi编写的,大小只有 8.89 MB,非常容易上手,还是多国语言的,有简体、繁体中文,速度不错,而且简单明了,所以可以是Visual Studio 的一个简易替代品。

下面主要说说如何使用这个软件。我使用的是Dev-C++ 5.0 beta 9.2 (4.9.9.2),从网上可以免费下载。

官方网站:http://www.bloodshed.net/,(需翻墙,你懂的),这个软件是开源的,任何人都可以下载到源码,另外,国内有垃圾人封装了恶心广告插件,是谁就不点名了(例如:Dev C++ 5 Build 1107 汉化版)。

一.HelloWorld的尝试

1.首先打开软件,File > New > Project,选择Console Application,并起名为FirstProject

2.然后保存,生成了 FirstProject.dev 的工程文件。

3.在左侧的Project下面,系统自动添加了Main.cpp文件,往里面写下如下的代码:

#include <iostream>
using namespace std;   
//It means the cout and endl is in std liberary!
//The alternative way of "Using namespace std" is using "::";
//using std:cout;
//using std:endl;
//But if you write another way different with the 2 ways above,then
//there will be problem. Please have a try.This is big difference between
//C and C++
int main(void)
{
    cout<<"Hello!\n";
    cout<<"Welcome to c++!\n";
    cout<<"In C++,the \"char\" type is "<<sizeof(char)<<" bytes"<<"\n";
    cout<<"In C++,the \"short\" type is "<<sizeof(short)<<" bytes"<<"\n";
    cout<<"In C++,the \"int\" type is "<<sizeof(int)<<" bytes"<<"\n";
    cout<<"In C++,the \"long\" type is "<<sizeof(long)<<" bytes"<<"\n";
    cout<<"In C++,the \"float\" type is "<<sizeof(float)<<" bytes"<<"\n";
    cout<<"In C++,the \"double\" type is "<<sizeof(double)<<" bytes"<<"\n";
    cout<<"In C++,the \"long double\" type is "<<sizeof(long double)<<" bytes"<<"\n"; 
    system("PAUSE");
}

4.在工具栏里面点击Execute > Compile来编译文件,接着通过测试后,点击Execute > Run.

5.这样程序运行成功,会弹出一个DOS的界面,显示如下信息:

 

二.DLL的编译和引用

在前文中我多次写到了用VC编译DLL文件,但是DEV-CPP也是一个很好用的工具。

1.首先打开软件,File > New > Project,选择DLL,并起名为DLLProject

2.然后保存,生成了 DLLProject.dev 的工程文件。

3.在左侧的Project下面自动生成了两个文件:dll.h 和 dllmain.cpp

4.我们往dll.h中写下如下的代码:

#ifndef _DLL_H_
#define _DLL_H_

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

class DLLIMPORT DllClass
{
public:
    DllClass();
    virtual ~DllClass(void);
    int Dllsum(int a,int b);
private:
};
DLLIMPORT int Fsum(int a,int b);

#endif /* _DLL_H_ */

我的目的是导出两个东西,一个是Class,一个是Fsum的Function。

5.我们往dllmain.cpp中写下如下的代码:

/* Replace "dll.h" with the name of your header */
#define BUILDING_DLL 1
#include "dll.h"
#include <windows.h>

DllClass::DllClass()
{
} 

DllClass::~DllClass ()
{
}
int DllClass::Dllsum(int a,int b)
{
    return a+b;
} 

DLLIMPORT int Fsum(int a,int b)
{
    return a+b;
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);                
} 

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

6.然后编译,生成了 DLLProject.dll,libDLLProject.a(相当于VC生成的.lib文件),dll.h 这三个文件是最主要的文件,用来被其他程序调用。还有一个文件叫做libDLLProject.def,从这里可以看出生成了哪些对外的接口。.lib 和 .h 总是搭配使用的,从他们的身上我们可以看到.dll中有哪些接口,但他们本身并不是代码的实现者,.dll才是。

7.下面我们再新建一个Console Application Project,命名为Test.dev

8.然后在Main.cpp 中写下如下的代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "dll.h"

//这里引用dll.h的原理就和在上面引用的stdlib.h stdio.h是一样的,只是我们需要对
//dll.h的路径说明,而stdlib.h等在默认情况下已经写入路径了,你可以查看
//Project option

using namespace std; 

int main()
{
    int b;
    b=Fsum(1,2);
    cout<<b<<’\n’;
    system("PAUSE"); 
return 0;
}

9.这是最重要的一步,把前面生成的DLLProject.dll,libDLLProject.a,dll.h都复制到当前的文件加下面,然后在左侧的Project下面,把dll.h添加上来之后,打开旁边的Classes,就可以看到刚才我们定义的函数和类了,这一点很直观,比VC强了很多。所以在上面的代码中,我们才能直接引用Fsum(1,2), 还有一点不能忘记的是,在Project工具栏里面,点击Project Option-> Parameters -> Linker -> Add liberiry or object, 把刚才的libDLLProject.a引入进来。

10.好了,编译运行,这样就看到结果了。

补充几个重要的知识:

1. 在Dev-CPP的IDE环境下,我们可以按住Ctrl,然后点击某个系统的函数,这样实现的功能就和在VC++里面把鼠标放在某个系统的函数上点击右键->go to the definition一样,这样我们就可以查看系统是如何定义的了。

在 Windows 7 下有个 Bug,如果安装路径有空格(例如:C:\Program Files\DEV-CPP\),那么编译dll会报错,解决方案:

修改安装路径为:C:\Dev-Cpp\,或者将设置中的缺省路径、包含路径等设置为长路径,例如:C:/PROGRA~1/DEV-CPP/。

配置文件路径[Windows 7]:C:\Users\%username%\AppData\Roaming\Dev-Cpp\devcpp.ini

语言文件路径:C:\Dev-Cpp\Lang\

本来官方原版是没有这个bug的,后来国内垃圾汉化,搞出了这个bug,真鸡巴恶心。

留言评论(旧系统):

佚名 @ 2013-12-03 19:32:47

V

本站回复:

V

Crazy @ 2014-10-02 20:51:52

为什么用Dev cpp 编译C语言DLL 总是出错? 这是建立一个默认的C DLL文件 感觉太坑了 E:\Devcpp\Can't open .lib file c:\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe Can't open output def file c:\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe Error closing file `' E:\Devcpp\collect2.exe [Error] ld returned 1 exit status 27 E:\Devcpp\Makefile.win recipe for target 'Project4.dll' failed

本站回复:

你用 dev 新建一个空白的 dll 工程看看。