Я забыл, как программировать на С++, я хочу, чтобы мой исполняемый файл копировал себя по другому пути. Я нашел код, который делает то, что я хочу, но есть ошибка преобразования, которую я не знаю, как решить:
void Victim::replicate()
{
char filename[ MAX_PATH ];
char newLocation[] = "C:\\Users\\myUsername\\Desktop\\";
BOOL stats=0;
DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
CopyFile(filename, newLocation, stats);
}
Я получил ошибку при использовании функции CopyFile, она ожидает тип LPCWSTR для имени файла и newLocation. Но если я объявлю эту переменную как LPCWSTR, функция GetModuleFileNameA больше не будет работать.
Похоже, ваш проект настроен на использование W версий функций API по умолчанию. Вы переопределяете это, вызывая A (Ansi) версию GetModuleFileName. Не - или делай, но тогда еще и звонить надо CopyFileA.
Принудительное использование версии Ansi:
void Victim::replicate()
{
char filename[ MAX_PATH ];
char newLocation[] = "C:\\Users\\myUsername\\Desktop\\";
BOOL stats=0;
DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );
CopyFileA(filename, newLocation, stats);
}
Принудительное использование широкой версии:
void Victim::replicate()
{
wchar_t filename[ MAX_PATH ];
wchar_t newLocation[] = L"C:\\Users\\myUsername\\Desktop\\";
BOOL stats=0;
DWORD size = GetModuleFileNameW( NULL, filename, MAX_PATH );
CopyFileW(filename, newLocation, stats);
}
Переход с проектом по умолчанию:
void Victim::replicate()
{
TCHAR filename[ MAX_PATH ];
TCHAR newLocation[] = _T("C:\\Users\\myUsername\\Desktop\\");
BOOL stats=0;
DWORD size = GetModuleFileName( NULL, filename, MAX_PATH );
CopyFile(filename, newLocation, stats);
}
@Flamecube667 Отлично! Пожалуйста! Что касается типов, я думаю, что нужно использовать макросы для char и wchar_t, чтобы они были должным образом Microsoftифицированы, но я их не помню :)
Спасибо, это работает, и теперь все ясно. Я должен ознакомиться со всеми этими типами