C++ include語法

版本: Visual C++ 2010

懇請各位先進,替我解決著這個問題.

我想知道Include過的東西如:

#Include <Function.dll>

是否就可以調用 Function.dll 中的 函數?

Update:

那請教一下,該如何調用?謝謝

Update 2:

不能如VB一樣直接調用嗎?

VB : Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

很抱歉,問題有點多,不過我一定選你最佳.

Update 3:

EdisonX ,對你真的是有些抱歉,

不過我已經答應他了,

過希望日後若我有問題,

你也可以吝嗇的幫助我><

在此先感謝2位高手,

我已經大概知道了!

此題就這樣結標了吧.

謝謝!

6 Answers

Rating
  • 其威
    Lv 7
    10 years ago
    Favorite Answer

    不是.

    #include 後面要接 header file, 不能直接 include 編譯過的 binary.

    是否能調用 Function.dll 中的函數是由 linker (連結器) 在決定的.

    你的問題有點像:「我把炒飯 (function.dll) 拿去煮 (include), 是否就能使用炒飯中的雞蛋 (函數) 做出蛋花湯 (你的程式)?」

    2011-04-04 09:55:41 補充:

    通常要生出一個 dll, 你會需要一個或一些 .c/.cpp 檔案, 加上一個或一些 .h 檔. 如

    - 原始檔: function1.cpp, function2.cpp

    - 標頭檔: function.h

    產生出

    - 動態連結函式庫: function.dll

    - 連結器檔案: function.lib

    然後你的程式 (例如 main.cpp) 要使用 function.dll 裡面的函式的時候:

    - 編譯時需要 function.h (程式裡面要寫 #include < function.h >

    - 連結時需要 function.lib

    - 執行時需要 function.dll

    2011-04-04 18:21:42 補充:

    你如果知道函式的原型 (他在 .h 裡面是怎麼宣告的), 可以直接寫

    long MessageBoxA(long hwnd, wchar_t *lpText, wchar_t *lpCaption, long wType);

    然後在編譯時期連結到 user32.dll.

    可是這不是 include.

    2011-04-05 00:26:29 補充:

    一開始的問題沒有問要怎麼用, 所以我回答說這樣不行與不行的原因.

    第一次補充提問問說要怎樣調用, 我也回答了要怎麼作(編譯期要怎樣, 連結期要怎樣, 執行時要怎樣).

    第二次補充提問幾乎是另一個問題, 我也回答說如果有 function prototype 時可以怎麼做.

    我每次回答都有提到要怎麼用, 這樣還被說沒幫助, 我覺得蠻囧的...

    2011-04-05 11:44:33 補充:

    附議意見 005.

    我手邊沒有 Visual C++, 所以沒有 step-by-step 的列出步驟.

    EdisonX 佛心的針對 Visual C++ 說明, 這題的最佳解答應該是 002.

    (如果接下來還有人回就不一定, 至少目前是 002.)

  • 9 years ago

    這一題造成了各位的困擾,

    我很抱歉!

    下一次我會等完答案在做最佳選擇!

    抱歉...

  • 9 years ago

    結案的東西叫

     〝最佳〞解答!

    不是

     〝最早〞回答!

     〝指定〞解答!

     〝想給〞解答!

    回答內容既然不是回答者中的〝最佳〞,就不該選或給他做結案的東西。

  • 9 years ago

    >> 不能如VB一樣直接調用嗎?

    不行!學 VC 別把 學VB 的動作概念拉進來,建議「暫時」砍掉重練,學完後再自行比較有何差異,不然會學不好。

    比較建議先去 google "calling dll vc"。

    2011-04-05 15:54:28 補充:

    1. 專案選項說明:Visual Studio 系列軟體,敝人知道目前還有人在用的版本有 6.0(新專案的話也不會用這再開發), .Net 2002, .Net 2003, 2005, 2008, 2010 (其中的 embedded 不要算),每一版的 Visual Studio 專案選項都有所差異,你提供的資訊並未包含專案選項為何,私以為

    Visual C++ -> Win32 -> (底下二個選項)

    Visual C++ -> 一般 -> 空專案

    都可能是你專案中的選項。在此我認為應是 Visual C++ -> Win32

    2011-04-05 15:54:44 補充:

    2. 若您說的是「一個已知的動態連結檔」,要知道如何使用它的話,這裡提供 msdn 一個簡單的「建立與連結使用」dll 說明,要深入 dll 運作、提供哪些函式,並不適合於此探討,但 帕提拉斯 於回答001 所說的確為大觀之概念。

    2011-04-05 15:54:49 補充:

    3. 調用 Win32 API 之 Dll : 若你只是想單純調用現有之 dll 裡的 api ,應說你跳得太快了,光是 GetProcAddress、AfxFreeLibrary 這二支函式是一定要會,但在 Import 時仍需再用一點技巧,另光是 typedef function pointer 我想也足夠你花一點時間下去研究。另若於專案選項時選擇正確,這部份 IDE 大多都會幫你做好設定, (除非又用到一些額外的 dll, lib 等,ex:psapi.lib)。

    2011-04-05 15:55:01 補充:

    4. .h 到底是在幹嘛的:,h 與 .cpp 設計實為一門藝術,一般在程式碼中多是使用 #include 或 #include "xxx.h" (猜你也還不知二者間的差異) ,其它的,看不到(一些設計可能會有 #include "xxx.cpp",私以為這非好的設計)!故絕不可能用 #include "xxx.dll"、#include "xxx.lib" 方式去做 import 動作。

    2011-04-05 15:55:13 補充:

    總結(針對 visual studio IDE)

    A: .h/.hpp/ (.c/.cpp): 用 include (少 include .c / .cpp)

    B: lib : 可用 IDE 輔助引入,或直接用 #pragma comment(lib, "xxx.lib") 方式引入

    C: dll : 參閱上述給的網址,同時去查 GetProcAddress、AfxFreeLibrary 這二隻怎麼用。

    2011-04-05 15:55:29 補充:

    建議:

    1. 估你是 vb 較 vc 熟,但要跳 vc,建議先挑本書,一字一字慢慢看,別把 vb 的觀念帶入 vc,這樣「很難」學好。

    2. 發問時,可以把 os, compiler , 專案選項, 額外函式庫, 等做為說明,以便其餘版友更能快速了解你的問題,不然大家都只是在隔空抓藥。像這次,私以為若你要調用的 dll 內之 api, 是在 vs 安裝時便附上,便可直接說明。

    2011-04-05 15:55:40 補充:

    補上對你有幫助的連結

    http://msdn.microsoft.com/zh-tw/library/64tkc9y5(v...

  • How do you think about the answers? You can sign in to vote the answer.
  • 9 years ago

    這位回答者根本沒告訴你怎麼用,為何要選這樣沒幫助的人當最佳解答?

  • 9 years ago

    參考看看,有誤請指正。

    #include語法通常如下:

    #include

    #include

    #include "xxx"

    被include進來的檔案一定要是文字檔,並切將被一同編譯。

Still have questions? Get your answers by asking now.