1. vs2010怎麼調用.dll和.lib
C++ 調用.lib的方法:
一: 隱式的載入時鏈接,有三種方法
1 設置工程的 Projects來載入DLL的lib文件
打開工程的 Projects菜單,然後在Linker/Additional Library Directories中加入lib文件所在的路徑,在Input/Additional Dependencies加入lib文件名稱,如(my.lib) ,然後在要使用該函數的地方加上該LIB的頭文件,如#include "..\lib.h"即可(沒有頭文件當然就不用了),而且應用程序運行時也需要dll文件。
32 通過程序代碼的方式
加入預編譯指令#pragma comment (lib,"*.lib"),這種方法優點是可以利用條件預編譯指令鏈接不同版本的LIB文件。因為,在Debug方式下,產生的LIB文件是Debug版本,如Regd.lib;在Release方式下,產生的LIB文件是Release版本,如Regr.lib。然後在首先要使用該函數的地方加上該LIB的頭文件,如#include "..\lib.h"即可(沒有頭文件當然就不用了)。
當應用程序對鏈接庫的LIB文件載入後,還需要把鏈接庫對應的頭文件(*.h)包含到其中,在這個頭文件中給出了鏈接庫中定義的函數原型。
二, 顯式的調用鏈接庫
隱式鏈接雖然實現較簡單,但除了必須的*.dll文件外還需要DLL的*.h文件和*.lib文件,在那些只提供*.dll文件的場合就無法使用,而只能採用顯式鏈接的方式。這種方式通過調用API函數來完成對DLL的載入與卸載,能更加有效地使用內存,在編寫大型應用程序時往往採用此方式。這種方法編程具體實現步驟如下:
①使用Windows API函數Load Library或者MFC提供的AfxLoadLibrary將DLL模塊映像到進程的內存空間,對DLL模塊進行動態載入。
②使用GetProcAddress函數得到要調用DLL中的函數的指針。
③不用DLL時,用Free Library函數或者AfxFreeLibrary函數從進程的地址空間顯式卸載DLL。
例:在應用程序中調用dll文件
——在應用程序中要首先裝入dll後才能調用導出表中的函數,例如用mfc
創建基於對話框的工程test,並在對話框上放置"load"按鈕,先添加裝載代碼。
1.首先在testdlg.cpp的首部添加變數設置代碼:
//設置全局變數glibsample用於存儲dll句柄
HINSTANCE glibsample=null; //如果定義成HANDLE類型,則出錯
//第二個變數showme是指向dll
庫中showme()函數的指針
typedef int(* Showme)(void);
Showme showme;
2.利用classwizard為"load"按鈕添加裝載dll的代碼
void ctestdlg::onloadbutton()
{
//要添加的代碼如下
if(glibsample!=NULL)
{
AfxMessageBox("the sample.dll has already been load.");
return;
}
//裝載sample.dll,未加路徑,將在三個默認路徑中尋找 (1)windows的系統目錄:\windows\system;
//(2)dos中path所指出的任何目錄;
//(3)程序所在的目錄;
glibsample=Loadlibrary("sample.dll");
//返回dll中showme()函數的地址
showme=(Showme)GetProcAddress(glibsample,"showme");
靜態鏈接庫LIB和動態鏈接庫DLL的區別
1.什麼是靜態連接庫,什麼是動態鏈接庫
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果採用靜態鏈接庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執行時可以「動態」地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態鏈接庫和動態鏈接庫的另外一個區別在於靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接 庫。靜態鏈接庫與靜態鏈接庫調用規則總體比較如下。
對於靜態鏈接庫(比較簡單):
首先,靜態鏈接庫的使用需要庫的開發者提供生成庫的.h頭文件和.lib文件,應用程序運行時還依賴.dll文件。
生成庫的.h頭文件中的聲明格式如下:
extern "C" 函數返回類型 函數名(參數表);
在調用程序的.cpp源代碼文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")
//指定與靜態庫一起鏈接
第二,因為靜態鏈接庫是將全部指令都包含入調用程序生成的EXE文件中。因此如果用的是靜態鏈接庫,那麼也就不存在「導出某個函數提供給用戶使用」的情況,要想用就得全要!要不就都別要!:)
對於動態鏈接庫:
動態鏈接庫的使用需要庫的開發者提供生成的.lib文件,.dll文件和*.h文件或者只提供dll和*.h文件。
*.h文件主要是知道函數原型使用。
首先我們必須先注意到DLL內的函數分為兩種:
(1)DLL 導出函數,可供應用程序調用;
(2)DLL 內部函數,只能在 DLL 程序使用,應用程序無法調用它們。
因此調用程序若想調用DLL中的某個函數就要以某種形式或方式指明它到底想調用哪一個函數。
2. vs2010下靜態載入dll文件,每次都要把.dll .lib 復制到目錄下,但書上說可以設置系統環境變數就不要復制
用的VS2003,沒用2010,不過估計也差不多。
調試目錄表示的是當你在VS環境中直接調用調試時,在哪兒尋找執行程序所需的資源。
按你的說法,你想實現的應該是生成Dll後,不需要拷貝Dll到目標目錄就可以直接執行程序調用最新的Dll。
可以按如下設置dll項目,假設程序所在目錄為C:\abc\abc.exe
1、屬性-》調試-》命令設為主程序 C:\abc\abc.exe
1、屬性-》調試-》工作目茄豎錄設為磨畝主程序所在目錄 C:\abc
2、將dll項目設置中鏈接器-》常規-》輸出文件顫游大改為C:\abc\XXX.dll
設置完後就可以直接使用調試命令了。
3. vs2010 , C++中如何載入外部文件夾中的dll文件
你好
很高興為你解答
答廳鏈案是:最好將lib文件和dll文件放在工程目錄下(或子目錄備帶下),放在工程外你需要使用絕對路徑,不扮滾孫合理。
滿意請採納,謝謝
4. vs2010下靜態載入dll文件,每次都要把.dll .lib 復制到目錄下,但書上說可以設置系統環境變數就不要復制了
1。可以把dll拷貝到 程缺坦中序同一目錄,這樣程序才能載入伏山dll
2.可以把dll的路徑載入到系統的環境變數信信PATH中,這樣程序也能找到dll
建議你看看dll載入順序和dll相關知識。
希望能夠幫到您!
5. vs2010怎麼把生成的exe與依賴的dll放在不同文件夾下CEGUI問題
將包含了dll文件的文件夾的路徑添加到系統的環境變數classpath裡面就行了。
6. vs2010的exe運行文件在哪裡
首先找到安裝VS2010的文件夾,例如安裝路徑為:
C:Program FilesMicrosoft Visual Studio 10.0
然後在安裝路徑下依次按以下順序打開即可:
C:Program FilesMicrosoft Visual Studio 10.0Common7IDEdevenv.exe
Visual Studio是微軟公司推出的開發環境,是目前最流行的Windows平台應用程序開發環境。Visual Studio 2010版本於2010年4月12日上市,其集成開發環境(IDE)的界面被重新設計和組織,變得更加簡單明了。Visual Studio 2010同時帶來了NET Framework4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview--CTP),並且支持開發面向Windows 7的應用程序。除了Microsoft SQL Server,它還支持 IBMDB2和Oracle資料庫。Visual Studio 可以用來創建 Windows 平台下的 Windows 應用程序和網路應用程序,也可以用來創建網路服務、智能設備應用程序和 Office 插件。
參考資料網路_Visual Studio 2010
7. vs2010在啟動調試的時候出現無法啟動***.dll
xmppHelper.dll缺失的問題,修復步驟如下:
1、首先,在一定途徑獲取xmppHelper.dll文件裂或,例如搜索引擎查詢並下載。
8. VS2010的MFC程序如何調用動態庫文件(dll文件)放在system32中仍然編譯無法打開d
dll這個東西,只要放到編譯時會去訪問的任意路徑上即可。
比如你現在是Debug,你可以回放到答Debug文件夾或者工程文件夾;
你現在是Release, 你可以放到Release文件夾或者工程文件放到System32無法訪問可能說明你的程序根本不需要去訪問System32,雖然這不太可能。
當然我可以認為樓主是在隱式調用dll, 顯示調用失敗系統不會報錯。如果 你是要隱式調用已經知道庫在何處和其中函數定義的dll,可以在你的FingerMatch.cpp開始的時候寫上:
#ifdef _DEBUG
#pragma comment(lib, "..(路徑)fp.lib")
#else
#pragma comment(lib, "..(路徑)fp.lib")
#endif
然後包含一下fp.h,這個應該是已經做了。那應該不會有什麼問題了。
值得注意的是編譯時dll只會打開一次,比如你在Debug文件夾下有一個fp.dll,在工程文件夾下也有一個fp.dll,那麼編譯時使用的是Debug文件夾下的dll,因為它先被找到。
如果上面說的都沒用,那麼你顯式調用吧
9. MFC如何查看調用dll文件的路徑
在調試時,按下Ctrl+Alt+U
,會彈出Moles,就可以查看你調用的dll的路徑
10. vs2010怎麼把生成的exe與依賴的dll放在不同文件夾下
windows系統運行exe,必悶譽困須要在相應的路徑里可以找到該exe所依賴的dll動態庫,才能正確運行。
關於如何找到依賴的dll,有三種途徑:
1、跟exe同目錄下尋找
2、系統環境變數path或者C:windowssystem32目錄下尋找
3、人工指定的目錄下尋找
所以,當你把dll和exe沒有放在一起的時候,就需要將dll所在的目錄,添加到系統環境變數path里,然後就可以正常運行exe了。
關於手動設置系統環境變數path的方法,可以這樣操作:
1、打開電腦----在電腦桌面上----右擊----我的電腦----選擇屬性
6、確定就可以了。