2016-12-20 12 views
-5

ビープ音を作成する2つの関数があります。 1つは標準的なビープ音機能を呼び出し、もう1つはライブラリーを使用してポートに直接書き込みます。私は変数に基づいて呼び出す関数を選択する滑らかな方法を見つけることを試みています。現時点で2つの関数(1つのstdcall)を呼び出すメソッド

void NewBeep(
    unsigned int freq, 
    int ms 
); 

私はちょうど2つのほぼ同じ機能を持っていますが、正しいコードを呼び出す:

標準ビープ機能は、私の関数であるよう

BOOL stdcall Beep(
    _In_ DWORD dwFreq, 
    _In_ DWORD dwDuration 
); 

として定義されます。

+7

''十分ではありませんか...? – WhozCraig

+1

関数をオーバーロードするか、異なる関数名を使用してください。 –

+1

*動的に*、*静的に*(コンパイル時に)決定しますか? –

答えて

3

あなたはそうのようなラッパー関数を作ることができる:

BOOL BeepWrapper (int freq, int ms) { 
    BOOL useStdFct = FALSE; 
    if (useStdFct) { 
    Beep (freq, ms); 
    } else { 
    NewBeep (freq, ms); 
    } 
} 

あなたは難しい

その他のオプションを使用しているものをコード化されていないプリプロセッサ定義にこれを行うことができますように、デフォルトのパラメータを使用することです別のパラメータを与えるだけでコード内で変更することができます。このように:プリプロセッサで

BOOL BeepWrapper (int freq, int ms, BOOL useStdFct = FALSE) { 
    if (useStdFct) { 
    Beep (freq, ms); 
    } else { 
    NewBeep (freq, ms); 
    } 
} 

を定義:(条件)場合のため

//Somewhere in code 
#define USE_STD_FCT FALSE 
//or in your compiler config 
// -DUSE_STD_FCT=FALSE 

BOOL BeepWrapper (int freq, int ms) { 
#ifdef USE_STD_FCT FALSE 
    Beep (freq, ms); 
#else 
    NewBeep (freq, ms); 
#endif 
} 
+2

'beepWrapper'関数は常に' NewBeep'関数を使います。 –

+0

は、他のパラメータを呼び出すたびにchanchedする必要があります。あるいは、他のパラメータでコンパイルするだけで変更できるように定義する必要があります。 – MadddinTribleD

+0

'BOOL useStdFct = FALSE;'が問題です。それをパラメータリストに移動するか、ローカル変数として宣言しないでください。上記以外のあなたのアプローチは良いものです。 –

関連する問題