Проблема в том, что вы пытаетесь передать char * в функцию, требующую wchar_t *
Вы можете написать функцию для преобразования строки в wstring:
wstring Widen( const string& str );
Тогда вы можете вызвать CreateFile следующим образом:
HANDLE hFile = CreateFile( Widen(filename).c_str(), etc. );
Еще одна техника, которую я видел, - это условно определить tstring как строку или wstring в зависимости от настройки Unicode и использовать tstring везде в вашем коде.
bool Open(tstring filename)
{
...
HANDLE hFile = CreateFile( filename.c_str(), etc. );
...
}
Боюсь, это сложная проблема, и лучшее решение для вас - это то, что вы можете решить только вы. Тем не менее, я согласен с Нилом и держусь подальше от прямого вызова CreateFileA, так как это в конечном итоге оставит вас в беспорядке.