2012-05-21 185 views
1

我是Qt中新增的C++編程。如果您可以回答任何或部分問題,那將非常有幫助,謝謝。從外部靜態庫訪問函數

由於僅在「.lib」文件中提供了外部庫,因此我將它作爲靜態庫使用。我已經通過stackoverflow網站的幫助正確地鏈接了它。我也有與庫相關聯的頭文件。我將頭文件包含在main.cpp中。我可以通過查看頭文件來獲得函數簽名。我的問題是如何從外部庫訪問函數?

例如,這裏是一個單一的功能,我試圖在main.cpp中使用:

==> QRETURN快速查找(字符*設備,無符號長的長度);

int main (int argc, char *argv[]{ 

// I have declared like this by copying the exact function signature with added extern 
extern QRETURN Quickfind(char *device, unsigned long length); 
cout << device << " and " << length << endl; 

} 然而,這將顯示設備和長度在此範圍內聲明的錯誤。 所以,我修改由函數之前聲明的參數:

int main (int argc, char *argv[]{ 
char *device = NULL; 
unsigned long length = NULL; 
extern QRETURN Quickfind(char *device, unsigned long length); 
cout << device << " and " << length << endl; 

} 我希望這兩個參數將被傳遞到函數,但顯然他們沒有。另外,如果我聲明後直接使用的功能:

int main (int argc, char *argv[]{ 
char *device = NULL; 
unsigned long length = NULL; 
extern QRETURN Quickfind(char *device, unsigned long length); 
Quickfind(*device, length); 
cout << device << " and " << length << endl; 

} 這會給我不確定參考「快速查找@ 8」的錯誤信息。

有人可以告訴我或給我一些提示或幫助如何從外部靜態庫正確訪問函數和它的使用?謝謝。

+4

讓自己一個很好的C++的書,你迫切需要了解的語言非常基本的。 (對不起,如果這聽起來很刺耳,但給你一些線索,這樣你就可以編譯,也許運行不會有幫助.C++非常複雜,你需要了解你在寫什麼,並且沒有代替一本好書或十本書。) – Mat

回答

0

雖然您對正在嘗試做的事有正確的一般想法,但您在做這件事時會遇到一些問題。

首先,因爲您正在嘗試使用extern函數,因此函數在頭文件中。據我所知,extern只能用於在另一個.cpp文件中聲明的函數,類,結構體或全局變量。

由於您的函數是在頭文件中聲明的,因此不需要使用extern,只需包含您已有的文件。

其次,當您創建變量length時,您將其設置爲NULL;雖然在技術上,在大多數情況下,NULL只被定義爲0,但在聲明空指針時(例如字符數組),您應該只使用NULL

第三,基於Quickfind的函數簽名...據我所知,Quickfind接受參數設備和長度,並給你一個QRETURN。我不知道Quickfind究竟做了什麼,但我猜測它不會給你一個設備名稱,也不會給你一個長度。

它可能會給你一個名字,但如果有的話,你必須先創建一個數組,然後放入名字。

我不知道到底是怎麼回事,但請試試這個:

#include <your header file> or "your header file" 

int main (int argc, char *argv[]{ 
    char *device = new char[100]; 
    unsigned long length = 100;   

    Quickfind(device, length); 
    cout << device << " and " << length << endl; 
}