Cpp вернуть любопытство - PullRequest
0 голосов
/ 07 марта 2012

Многие функции в OpenNI возвращаются следующим образом:

XN_C_API XnInt32 XN_C_DECL  xnVersionCompare (const XnVersion *pVersion1, const XnVersion *pVersion2)

Я бы хотел узнать, что такое XN_C_API и XN_C_DECL.Просто любопытство!

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Это не имеет ничего общего с возвращаемым значением. Не глядя на источник, я подозреваю, что при компиляции для Windows:

  • XN_C_API определяется как __declspec(dllexport) или __declspec(dllimport) в зависимости от того, компилируете ли вы DLL или импортируете из нее функции.

  • XN_C_DECL определяется для требуемого соглашения о вызовах для функции (возможно __stdcall или __cdecl)

0 голосов
/ 07 марта 2012

Не взглянув на определения, я бы догадался:

  • XN_C_API эффективно extern "C" для компилятора C ++, так что функцию C можно вызывать из C ++.

  • XN_C_DECL относится к соглашениям о вызовах и проблемам экспорта / импорта, навязанным Windows. Это может быть __declspec(ddlexport) или __declspec(dllimport), и оно может включать __stdcall и т. Д., А также может беспокоиться о FAR и т. Д. (Но, вероятно, больше не нужно).

...