C++ 将成员函数直接链接到标头中声明的C方法

C++ 将成员函数直接链接到标头中声明的C方法,c++,winapi,C++,Winapi,我可以以某种方式链接这样的成员函数吗? 将该方法重新声明为成员并使其调用Mmsystem.h方法以使其不必包装 #include <windows.h> #include <Mmsystem.h> namespace SoundLib { public class CWave { public: // WaveIn call external UINT waveOutGetNumDevs(VOID); }; } #包括 #包括 名称空间声音库{

我可以以某种方式链接这样的成员函数吗? 将该方法重新声明为成员并使其调用Mmsystem.h方法以使其不必包装

#include <windows.h>
#include <Mmsystem.h>

  namespace SoundLib {

 public class CWave
 {
 public:
  // WaveIn call
  external UINT waveOutGetNumDevs(VOID);
 };

}
#包括
#包括
名称空间声音库{
公共类CWave
{
公众:
//WaveIn呼叫
外部UINT waveOutGetNumDevs(无效);
};
}

对不起,不行。

不行,你得把它包起来。此外,您的代码也有一些错误,例如
external
extern
(尽管这是理论上的)和
public
在您上课之前。

没有,但您可以用
内联
甚至
静态
来包装它,并希望编译器足够聪明(很可能是这样)


您需要显式调用您包装的函数:

class CWave
{
public:
    static UINT waveOutGetNumDevs(VOID)
    {
        return ::waveOutGetNumDevs();
    }
};

请注意双冒号。由于您的方法和全局函数具有相同的名称,所以需要双冒号以防止无限递归。

代码看起来不像C++。Extn“C”无效({):谢谢!我不是C++程序员。我只是玩它。无论如何,使用VS2008它不在类名称之前公开。但是我要说它的理论。我要把它包起来。应该是代码> {Re::WaveOutGigNoDeDsSo();}< /Cord>
class CWave
{
public:
    static UINT waveOutGetNumDevs(VOID)
    {
        return ::waveOutGetNumDevs();
    }
};