怎样在C++Builder中创建使用DLL

下面我就介绍一下在BCB   (C++Builder下简称BCB)   中如何创建使用DLL和一些技巧。    
    一、创建:    
    使用BCB   File|NEW建立一个新的DLL工程,并保存好文件BCB,生成一个DLL的程序框    
  架。    
    1.DllEntryPoint函数为一个入口方法,如果使用者在DLL被系统初始化或者注销时    
  被调用,用来写入对DLL的初始化程序和卸载程序;参数:hinst用来指示DLL的基地址;    
  reason用来指示DLL的调用方式,用于区别多线程单线程对DLL的调用、创建、卸载DLL;    
     
    2.在程序中加入自己所要创建的DLL过程、函数;    
    3.用dllimport描述出口;    
    例程序如下:    
    #include    
    #pragma   hdrstop    
    extern   “C”   __declspec(dllexport)   int   test();    
    int   WINAPI   DllEntryPoint(HINSTANCE   hinst,   unsigned   long   reason,   void*)    
    {    
       return   1;    
    }    
    int   test()    
    {    
       return   3;    
    }    
    注意:动态链接库中调用过程、函数时有不同的CALL方式   __cdecl、   __pascal,   _    
  _fastcall、__stdcall,BCB中默认的方式为__cdecl(可不写),如果考虑兼容性可用时    
  __stdcall声明方法为:    
    extern   “C”   __declspec(dllexport)   int   __stdcall   test();    
    对于其中过程、函数也改为:    
    int   __stdcall   test()    
    二、使用DLL    
    在BCB中使用DLL有两种方法:    
    1.用静态调用法    
    首先需要在BCB的项目中加入输入接口库(import   library),打开工程项目,使用B    
  CB   View|Project   Manager打开项目列表,向项目中加入接口库(*.lib)。    
    其次在头文件中加入接口声明。    
    例程序如下:    
       //define   in   include   file    
    extern   “C”   __declspec(dllimport)   int   __cdecl   test();    
    //use   function   in   main   program    
    int   I;    
    I=test();    
    注意:    
    (1)动态链接库调用过程、函数时CALL方式   与创建时方式一样不写为__cdecl,其它    
  需要声明。    
    (2)BCB创建的DLL有对应的输入接口库(import   library),如只有DLL而无库时,可    
  用BCB的implib工具产生:implib   xxx.lib   xxx.dll;另外可用:tlib   xxx.lib,xxx.ls    
  t   产生DLL的内部函数列表,许多Windows的未公开技术就是用这种方法发现的。    
    2.动态调用法    
    动态调用法要用Windows   API   中的LoadLibrary()和GetProcAddress()来调入DLL库    
  ,指出库中函数位置,这种方法较常见。    
    例程序如下:    
       HINSTANCE   dd;    
       int   _stdcall   (*ddd)(void);    
       dd=LoadLibrary(“xxx.dll”);    
       ddd=GetProcAddress(dd,“test”);    
       Caption=IntToStr(ddd());    
    FreeLibrary(dd);    
    三、注意:    
    创建DLL时编译链接时注意设置Project   Options。    
    Packages标签:去除Builder   with   runtime   packages检查框。    
    Linker标签:去除Use   dynamic   RTL检查框。    
    否则创建的DLL需要Runtime   packages   or   Runtime   library。      
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值