Что произойдет, когда вы скажете
MessageBox(NULL,(LPTSTR)&szFilename,"Foo",MB_ICONINFORMATION);
При передаче строк системным функциям вам потребуется подобрать указатель на необработанную строку.Например, если вы хотите использовать объект std :: string для построения вашего пути, вам нужно будет сказать
mmioOpen(filename.c_str(),NULL,MMIO_READ);
Ваше приведение предполагает, что из CString * в LPTSTR предполагается, что CString двоично совместима с LPTSRT.что не так.Когда вы пишете LPCTSTR для szFilename, вы вызываете оператор приведения, определенный в CStrings, который преобразует его в соответствующий формат.Вы пробовали только
hmmio = mmioOpen((LPCTSTR)szFilename,NULL,MMIO_READ);
Последнее приведение здесь ничего не дает, поэтому этого должно быть достаточно.