![](/img/trans.png)
[英]stdcall name mangling using extern c and dllexport vs module definitions (msvc++)
[英]typedef, DLLEXPORT, __stdcall help in C
誰能請我提供以下2行代碼的全部含義?
typedef void DLLEXPORT __stdcall(* DLL_Inquiry)(char * cDriverName,int * iDriverType,int * iDriverBUS,int * iNumberOfChannel);
DLL_Inquiry DRV_PH_Inquiry;
我知道DLLEXPORT
是從DLL導出功能, __stdcall
是傳遞約定x86的說法。
但是我仍然無法得到這兩行的全部含義。 可能是我對typedef
中函數或函數指針的使用感到困惑。
DLL_Incuiry
是一個指向函數指針的typedef,它接受參數(char*, int*, int*, int*)
並且不返回任何值(返回類型為void
)。 該函數還使用DLLEXPORT和__stdcall定義的調用約定。
DRV_PH_Inquiry
是該類型的變量,所以如果你有函數foo
:
void DLLEXPORT __stdcall foo (char *cDriverName, int *iDriverType, int *iDriverBUS, int *iNumberOfChannel);
然后你可以完成任務:
DRV_PH_Inquiry = foo; // DRV_PH_Inquiry now points to the function foo
typedef void DLLEXPORT __stdcall (*DLL_Inquiry) (
char *cDriverName, int *iDriverType, int *iDriverBUS, int *iNumberOfChannel);
這將DLL_Inquiry
的typedef定義為函數指針。
void
返回類型。 __stdcall
。 DLLEXPORT
的定義不是標准的。 這將在您的代碼中找到。 很可能會有一個頭文件將DLLEXPORT
定義為宏。 例如,在編譯DLL時,在Windows平台上,它可能會評估為__declspec(dllexport)
。 在任何情況下,只有您可以確定DLLEXPORT
的定義是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.