调用两个函数(一个stdcall)的方法
我有两个函数来创建一个嘟嘟声。一个调用标准的哔声功能,另一个使用库直接写入端口。我试图找到一种根据变量选择要调用哪个函数的方法。调用两个函数(一个stdcall)的方法
标准提示音功能被定义为
BOOL stdcall Beep(
_In_ DWORD dwFreq,
_In_ DWORD dwDuration
);
凡为我的功能是:
void NewBeep(
unsigned int freq,
int ms
);
目前,我只是有两个几乎相同的功能,但调用正确的代码。
你可以只让一个包装函数,像这样:
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
}
您的'beepWrapper'函数将始终使用'NewBeep'函数。 –
必须在每次调用另一个时进行chanched,或者您进行了定义,以便通过仅使用其他参数进行编译 – MadddinTribleD
'BOOL useStdFct = FALSE;'是问题所在。将其移至参数列表或不要将其声明为局部变量。除此之外,你的方法是一个好方法。 –
'如果(条件)'是不够的,因为...? – WhozCraig
重载您的功能或使用不同的功能名称。 –
你想确定它*动态*还是*静态*(即在编译时)? –