怎樣在C++Builder中建立使用DLL (轉)
怎樣在C++Builder中建立使用DLL (轉)[@more@]
怎樣在C++Builder中建立使用DLL
-
自從C++Builder從去年浪漫情人節上市以來,吸引了大量的、VC、Vb的員到它的懷抱,大量的C、C++程式設計師感嘆道:總算有了C的視覺化開發工具,對我也是一樣,從BC、Delphi到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 WIN 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;另外可用:tlib xxx.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。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993124/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在C++Builder中建立共享記憶體段 (轉)C++UI記憶體
- 在C++Builder中建立Access odbc資料來源 (轉)C++UI
- 在Oracle中怎樣才能使用索引(轉)Oracle索引
- 在C++Builder使用TTS(Text To Speech) (轉)C++UITTS
- C++Builder使用ADSI建立web站點 (轉)C++UIWeb
- c++builder中怎樣進行標準輸入、出C++UI
- DLL檔案在Delphi的建立及呼叫 (轉)
- 在網頁中怎樣使文字旋轉? (轉)網頁
- 在ASP檔案中呼叫DLL (轉)
- 怎 樣 在APPLET 中 發EMAIL (轉)APPAI
- 在C++Builder 5中使用ADO資料庫程式設計 (轉)C++UI資料庫程式設計
- 怎樣在 Linux Mint 中建立和切換工作區Linux
- 用C++Builder建立數字簽名 (轉)C++UI
- 怎樣在APPLET中發EMAIL javamail (轉)APPAIJava
- DLL檔案中Form的使用 (轉)ORM
- 怎樣建立專案預算(轉)
- 在Windows中怎樣尋找自啟動程式(轉)Windows
- 使用C++Builder建立自定義VCL元件時的一些問題 (轉)C++UI元件
- 怎樣在QueryBuilder中使用PostgreSQL中的?操作符UISQL
- 怎樣在Xcode 6中使用向量圖形XCode
- 在JavaScript中建立新物件(轉)JavaScript物件
- C++BUILDER中幾種容器的使用C++UI
- 翻譯|在Rust中怎樣panicRust
- [轉] Oracle資料庫中建立表時怎樣考慮列順序Oracle資料庫
- 怎樣在VC++中訪問和修改登錄檔 (轉)C++
- 生成Dll在Unity中使用Unity
- 在C#中使用C/C++寫的DLL (轉)C#C++
- 在VB.Net中建立使用控制元件陣列 (轉)控制元件陣列
- 怎樣在不同網路安全需求下建立DMZ區
- 在 Visual C++ 中 建 立 MFC 擴 展 DLL (轉)C++
- 再談在VB中呼叫VC++開發的DLL (轉)C++
- 怎樣在squid中透過URL進行訪問控制(轉)UI
- 怎樣在遊戲設計製作中實現指令碼控制(轉)遊戲設計指令碼
- 怎樣在Python中執行cmdPython
- 怎樣在敏捷開發中做到“事半功倍”敏捷
- 使用ikmv將jar轉換為dll,在.NET中直接呼叫JAR
- 怎樣在 Markdown 中使用數學公式公式
- PDF轉換器在電腦上怎樣使用?PDF轉換器功能有哪些?