程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 怎樣在C++ Builder中創建使用DLL

怎樣在C++ Builder中創建使用DLL

編輯:關於C++

動態鏈接庫(DLL)是Windows編程常遇到的編程方法,下面我就介紹一下在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),打開工程項目,使用BCB 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;另外可用:tlibxxx.lib,xxx.lst 產生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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved