作者flashphp (ashin)
看板C_and_CPP
標題Re: [問題] 外部函數使用時機
時間Mon Nov 2 16:11:28 2009
※ 引述《bzgibson (B'z)》之銘言:
我想我來回答一下第一個問題,
我想請問一下外部函式的使用時機?
如果你想寫一個Function供其它人使用,甚至放諸四海皆準,
那你就必需使用外掛函式.
如何開始撰寫外掛函式?
如果你手邊剛好有Visual C++的話,照下的步驟你就可以得到一個很好的範例:
File->New->(Project)Win32 Dynamic-Link Library,
點選 "A Dll that exports some symbols"
我把其中一小段自動產生的.h Copy過來:
//--------------------------------------------
#ifdef AAA_EXPORTS //AAA是我project的名稱
#define AAA_API __declspec(dllexport)
#else
#define AAA_API __declspec(dllimport)
#endif
AAA_API int fnAaa(void); //外掛Function的宣告
//--------------------------------------------
之後你只要在*.cpp裡撰寫:
AAA_API int fnAaa(void)
{
//your code here
//end
return 1;
}
在Compiler後會產生*.dll及*.lib <=這就是要供人家使用的東西
其它人如何使用我撰寫的外掛函式?
在程式裡include外掛函式的*.h,並在Project裡加入外掛函式的*.lib,
*.dll也要放置在相同的目錄下(若未指定路徑).
其實也業界有些很常用,用到爛的有名Lib,
像是美商國家儀器NI出的GPIB連線Library: BorlandC_gpib-32.obj
由麻省理工學院開發並發布在自由軟體協會(GNU)的快速傅立葉轉換Library
(參見
http://www.fftw.org/)
以上是工科的學生及業界比較會知曉的東西,
這樣為何要用外掛Lib的動機及理由就很明顯了,那就是:
如果你不懂快速傅立葉轉換,你老闆又叫你下禮拜做出一套來,
你自然會開始Google,並學會外掛Lib的完整使用方法...
: 第一個問題:我想請問一下外部函數的使用時機??
: 例如:extern void func(xxxxx)
: 我專案裡的main呼叫A檔的函式
: 或者
: A檔呼叫main定義的函式
: 我都沒使用到extern,想請問哪種情況下才需要宣告成外部函式????
: 第二個問題:function pointer常用到哪個地方????好難使用阿XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.218.105.109
→ flashphp:突然覺得我離題離很大,明明是在問Extern....我卻硬 11/02 16:12
→ flashphp:是回答到 dll export的東西... 11/02 16:13
推 VictorTom:照之前討論, function預設就是extern的, 或許應該反過來 11/02 16:14
→ VictorTom:解釋, 什麼時候才會用到非extern的function. 話說回來, 11/02 16:14
→ VictorTom:非extern的function修飾子是用什麼啊?_? static?? 11/02 16:14
→ flashphp:VictorTom,說真的我還不知道怎樣用非extern呢... 11/02 16:49
→ flashphp:少加一個大..VictorTom大, 不過我想沒人會刻意限定,就 11/02 16:50
→ flashphp:好像是你有a.cpp, b.cpp, 在a裡寫了一個fun(), 還刻意讓 11/02 16:52
→ flashphp:它在b.cpp裡不能使用... 11/02 16:54
推 dendrobium:有阿... 11/02 17:01
推 QQ29:就static吧 檔案限定 11/02 17:34
推 VictorTom:我~~我是小小啊Orz 應該把巢狀函數算進來嗎?? 11/02 17:43
推 metroways:身為一個新手,我希望這篇M。 11/02 18:07
推 bzgibson:感謝f大~看完發現.............我好弱~我該去填海了 11/02 22:16
→ flashphp:b大別這樣... 這些東西也是大家分享學習來的 ^_^ (f小) 11/03 09:34