C++ Builder 开发DLL项目

来源:互联网 发布:知行论坛pt 编辑:程序博客网 时间:2024/04/27 18:47

环境:Win7-64bit + C++ Builder 6.0


开发一个DLL项目,并开发一个测试项目用来测试开发好的DLL。

1. 新建一个DLL项目

在Project Management中右键选择Add new project。选择DLL wizard。


点击OK,按照默认的配置,再点击OK。这样一个DLL项目新建起来了。


一般在一个project group中有多个项目,我们把DLL项目和测试的项目放在一个Project group中。

在Project Management中保存这个DLL项目,和这个project group。操作是右键选择保存即可。


 资源管理器中是这样:



解释一下:

DLLProjectTest是根目录,相当于VS中的解决方案目录。

DLL1是存放DLL项目的;

DLLTest(事先建好的)是存放测试项目的;

include是存放共有文件,如DLL的导出头文件;

lib存放DLL生成的*.lib文件;

out用于存放DLL生成的*.dll和测试项目生成的*.exe,这样*.dll和*.exe在同一目录,*.exe运行时就能找到*.dll从而正常运行。


2. 配置DLL项目

配置DLL项目,使其生成的*.lib、*.dll生成在我们指定的目录。

project Management右键DLL1项目,选择Options


配置如下:

在Compiler选项卡,选中Full debug(一般默认选中的),开发完成后发布时选择Release;


在Packages中取消勾选Build with...,以生成没有不共享库的*.dll;


在Link中取消勾选Use dynamic RTL,不依赖共享库;



在Directories/Cond...中配置out、lib目录分别为..\out和..\lib,如果用到其他的头文件和lib文件,则还需要配置上面的Include path、Library path。

配置完成,点击OK完成配置。


3. 开发DLL。

建议不要使用默认生成的Unit1.cpp,我们自己定义自己的头文件和源文件。

回到资源管理器中,在include文件夹中新建文件dll.h,在DLL1文件夹中新建文件dll.cpp。确保两者是UTF-8编码!

然后在Project Management中右键DLL1项目选择Add将上面的dll.cpp添加到DLL1项目中(这是采用引用形式,即不拷贝文件),记住不要添加.h文件!。


下面是代码实现。

// dll.h

#ifndef DLL_H_INCLUDED#define DLL_H_INCLUDED#ifdef DLL_EXPORT#define DLL_API __declspec(dllexport)#else#define DLL_API __declspec(dllimport)#endif#ifndef EXTERN_C#define EXTERN_C extern "C"#endifEXTERN_C DLL_API int __stdcall add(int *p, int *q);#endif


// dll.cpp

#define DLL_EXPORT#include "dll.h"int __stdcall add(int *p, int *q){    return *p + *q;}

接着对DLL1项目Build,就可以在out、lib文件夹下看到想要的文件了。


4. 测试

在Project group下新建一个Application项目,保存为DLLTest。


配置DLLTest

在Compiler选项卡,选中Full debug(一般默认选中的),开发完成后发布时选择Release;

在Packages中取消勾选Build with...,以生成没有不共享库的*.dll;

在Link中取消勾选Use dynamic RTL,不依赖共享库;

在Directories/Cond...中设置输出的out目录为..\out;在include path里加上..\include;在Library path里加上..\lib。

点击OK完成配置。


在Form中新建一个按钮来测试。

// Unit2.cpp

//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include "Unit2.h"#include "dll.h"    // 括入dll头文件#pragma link "DLL1.lib"    // 链接时需要的*.lib文件//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm2 *Form2;//---------------------------------------------------------------------------__fastcall TForm2::TForm2(TComponent* Owner)    : TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TForm2::Button1Click(TObject *Sender){    int m = 100;    int n = 119;    int ret = add(&m, &n);    ShowMessage(ret);    }//---------------------------------------------------------------------------
运行DLLTest,打印出正确结果。测试完成。整个开发就是这样 :)

0 0
原创粉丝点击