调用两个函数(一个stdcall)的方法

调用两个函数(一个stdcall)的方法

问题描述:

我有两个函数来创建一个嘟嘟声。一个调用标准的哔声功能,另一个使用库直接写入端口。我试图找到一种根据变量选择要调用哪个函数的方法。调用两个函数(一个stdcall)的方法

标准提示音功能被定义为

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

凡为我的功能是:

void NewBeep(
    unsigned int freq, 
    int ms 
); 

目前,我只是有两个几乎相同的功能,但调用正确的代码。

+7

'如果(条件)'是不够的,因为...? – WhozCraig

+1

重载您的功能或使用不同的功能名称。 –

+1

你想确定它*动态*还是*静态*(即在编译时)? –

你可以只让一个包装函数,像这样:

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;'是问题所在。将其移至参数列表或不要将其声明为局部变量。除此之外,你的方法是一个好方法。 –