C中的typedef,DLLEXPORT,__ stdcall帮助

时间:2014-04-07 10:25:43

标签: c++ 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中的函数或函数指针的使用感到困惑。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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的定义是什么。