実際の戻り型がちょうどFT_STATUS
それ自体である:APIのにコンパイルされている場合
#ifdef FTD2XX_EXPORTS
#define FTD2XX_API __declspec(dllexport)
#else
#define FTD2XX_API __declspec(dllimport)
#endif
:
typedef ULONG FT_STATUS;
FTD2XX_API
は__declspec
ディレクティブを使用して処理するDLLのインポート/エクスポートを定義するマクロですDLL、FTD2XX_EXPORTS
は、DLL関数がエクスポートされるように定義されています。 APIが使用されているときは、FTD2XX_EXPORTS
が定義されていないため、DLL関数がインポートされます。
#ifdef _MAC
...
#define WINAPI CDECL
...
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
...
#define WINAPI __stdcall
...
#else
...
#define WINAPI
...
#endif
だから、あなたの例の関数の宣言は、(同様にパラメータ型決議を含む。)これに解決するでしょう:
WINAPI
は、(Windowsシステム上で
__stdcall
)呼び出し規約に解決
windef.h
でマクロです
__declspec(dllimport)
unsigned long __stdcall FT_Read(
void *ftHandle,
void *lpBuffer,
unsigned long nBufferSize,
unsigned long *lpBytesReturned
);
これらのタイプのマクロは、複数のコンパイラで使用される、および/またはDLLにコンパイルされるAPIで一般的ではありません。この場合、エクスポートされた関数は、実装と使用方法、ターゲットプラットフォーム、使用されるコンパイラによって異なる方法で宣言する必要があります(たとえば、__declspec(dllimport)
/__declspec(dllexport)
の代わりにextern
/__export
を使用するコンパイラもあります)。
これらの型はどこに宣言されていますか?彼らは何もないマクロ(例えば '#define FTD2XX_API')または関数の前に許可されたキーワード(' __stdcall'など)にマップすることができます – Tas
関数には "3つの戻り値の型"がありません。 1。 'WINAPI'シンボルは、Windows APIヘッダーで定義されたプリプロセッサマクロです。他の2つのシンボルは、おそらくはプリプロセッサマクロでもあるが、FTD2XXヘッダーで定義されているので、それらのシンボルを見つけて、それらが何であるかを知る必要がある。私の推測では、 'FT_STATUS'はある種のマクロ(またはタイプエイリアス)であり、' FTD2XX_API'は 'declspec'コンパイラ指令です。 –
FTD2XX_APIは#defineで与えられます。FTD2XX_API __declspec(dllimport)または#define FTD2XX_API __declspec(dllexport) –