bcb平台的C++dll的静态调用法和动态调用法的方法

来源:互联网 发布:普通网络主播收入 编辑:程序博客网 时间:2024/05/27 16:42

 

动态链接库(DLL)Windows编程常遇到的编程方法,测试时,可能需要进行静态调用法和动态调用法进行测试。下面介绍一下在BCB (C++ Builder下简称BCB) 中如何创建使用DLL和一些技巧。

BCB中使用DLL有两种方法:

  1.用静态调用法

首先需要在BCB的项目中加入输入接口库(import library),打开工程项目,使用BCB View|Project Manager打开项目列表,向项目中加入接口库(*.lib)

方法:将该文件拷贝到当前目录,使用 implib MyDll.lib MyDll.dll 生成,使用 $BCB path/Bin/implib.exe 生成 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而无库时,可用BCBimplib工具产生:implib xxx.lib xxx.dll;另外可用:tlibxxx.lib,xxx.lst 产生DLL的内部函数列表,许多Windows的未公开技术就是用这种方法发现的。

dll中用到的变量也自己写,如enum VideoStandard

{

   VIDEO_STANDARD_NTSC,

   VIDEO_STANDARD_PAL

};就不用加vc的头文件了

  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);

需要使用vc的头文件。方法:#include "IDVP7010BDLL.h"(修改vc的头文件)

project下的directory中添加,头文件的路径。

  三、注意:

  创建DLL时编译链接时注意设置Project Options

  Packages标签:去除Builder with runtime packages检查框。

  Linker标签:去除Use dynamic RTL检查框。

否则创建的DLL需要Runtime packages or Runtime library

 

原创粉丝点击