作为一名C ++编程初学者,我坚持看似简单的问题。我无法将回调函数指针作为参数传递。 midiInOpen
函数需要第三个参数的DWORD_PTR
类型值,显然这不起作用:
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <windows.h>
#include <mmsystem.h>
using namespace std;
void CALLBACK traiterMidiIn(HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) {
std::wcout << "wMsg:" << wMsg << std::endl;
std::wcout << "dwParam1:" << dwParam1 << std::endl;
std::wcout << "dwParam2:" << dwParam2 << std::endl;
}
int main() {
// Set the console to unicode mode
_setmode(_fileno(stdout), _O_U16TEXT);
// Declare variables
BYTE byResultat;
UINT uiNumDevice;
MIDIINCAPS midiincaps;
HMIDIIN hmidiin;
// Initialize variables
uiNumDevice = 0;
// Open MIDI port
byResultat = midiInOpen(&hmidiin, uiNumDevice, &traiterMidiIn, 0, CALLBACK_FUNCTION);
return 0;
}
我认为这与成员/非成员/静态函数有关,但是关于它们的例子仍然难以理解我的弱技能。 生成错误:
l'argument de type "void (__stdcall *)(HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2)" est incompatible avec le paramètre de type "DWORD_PTR"