[問題] #define Function 的問題

看板C_and_CPP作者 (= =)時間12年前 (2012/07/10 00:17), 編輯推噓4(4020)
留言24則, 6人參與, 最新討論串1/1
我在程式裡面看到定義 #define EFI_PEI_CORE_ENTRY_POINT(InitFunction) \ UINTN \ __stdcall \ _DllMainCRTStartup ( \ UINTN Inst, \ UINTN reason_for_call, \ VOID *rserved \ ) \ { \ return 1; \ } \ \ EFI_STATUS \ __declspec( dllexport ) \ __cdecl \ InitializeDriver ( \ IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, \ IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList \ ) \ { \ return InitFunction(SecCoreData, PpiList); \ } typedef VOID (EFIAPI *EFI_PEI_CORE_ENTRY_POINT)( IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList ); 有人知道這函式為什麼要多定義 _DllMainCRTStartup 嗎? 因為程式裡其實只用到 InitFunction 不是嗎? 另外 __stdcall __declspec(dllexport) __cdecl 的用途是? 在程式內的宣告使用方式如下: 這樣用法是對的嗎?? 還是我看錯 .H 檔了?? VOID EFIAPI SecStartupPhase2( IN VOID *Context ) { EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint; : (*PeiCoreEntryPoint) (SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTable); : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.213.214

07/10 00:27, , 1F
你先把它展開成.S檔就知道了
07/10 00:27, 1F

07/10 01:14, , 2F
efi bios kernel ?
07/10 01:14, 2F

07/10 01:27, , 3F
oh,我看到你第一個問題了,第一個問題在自我修養裡有提到,
07/10 01:27, 3F

07/10 01:28, , 4F
_DllMainCRTStartup 是在 main 前執行的 function,
07/10 01:28, 4F

07/10 01:30, , 5F
然後 __stdcall 那段是調用約定,一樣在"程式設計師的自我
07/10 01:30, 5F

07/10 01:30, , 6F
修養"裡有提到,建議去翻翻.
07/10 01:30, 6F

07/10 08:05, , 7F
感覺是新手剛踏入bios這行, 然後又要負責Win32的driver XD
07/10 08:05, 7F

07/10 08:05, , 8F
但糟糕的是連C都沒學好...
07/10 08:05, 8F

07/10 13:50, , 9F
那樓上可以推薦一下有那些比較好的參考資料可以找嗎?
07/10 13:50, 9F

07/10 13:51, , 10F
感恩~
07/10 13:51, 10F

07/10 17:28, , 11F
別的也就算了, __stdcall 這些東西請 google
07/10 17:28, 11F

07/11 04:06, , 12F
因為編成 DLL 又沒修改 linker 參數改變 entry point
07/11 04:06, 12F

07/11 04:07, , 13F
所以預設會找 DllMainCRTStartup, 這邊其實沒用到所以加
07/11 04:07, 13F

07/11 04:07, , 14F
個一個空的(直接回傳)的實作
07/11 04:07, 14F

07/11 04:12, , 15F
stdcall cdecl 這些請加上 "calling convention" 去搜尋
07/11 04:12, 15F

07/11 04:18, , 16F
__declspec(dllexport) 這跟 PE 執行檔的 import/export
07/11 04:18, 16F

07/11 04:18, , 17F
有關, 中文書的話我也建議看上面推文提到的 "程式設計師
07/11 04:18, 17F

07/11 04:19, , 18F
的自我修養" 一書
07/11 04:19, 18F

07/11 04:24, , 19F
找資料的時候會找到一堆 Windows 程式設計的資料,因為雖
07/11 04:24, 19F

07/11 04:25, , 20F
你要做 UEFI,但是看 spec 就會發現它的執行檔格式和一些
07/11 04:25, 20F

07/11 04:26, , 21F
機制有利用到現有的 PE 格式,所以多少懂一點是有幫助的
07/11 04:26, 21F

07/11 04:37, , 22F
(上面的 linker 指的是 Microsoft linker)
07/11 04:37, 22F

07/11 04:39, , 23F
還有..這段的機制主要相關的是 PI spec,不是 UEFI spec
07/11 04:39, 23F

07/11 08:26, , 24F
感謝 UNARYvvv 詳細的回答 讓我學到很多
07/11 08:26, 24F
文章代碼(AID): #1F-mGYtq (C_and_CPP)