WINAPI C ++ VS 2008 против VS 2010 - PullRequest
2 голосов
/ 02 августа 2011

Я пишу приложение, которое отслеживает добавление файлов в определенном каталоге и отправляет эти файлы в определенном порядке. Это работает отлично. Но я столкнулся с интересной проблемой - я написал этот проект для Windows XP, используя VS 2008, и мне нужно объединить мое решение с другим, расположенным на ПК с Windows 7 и VS 2010, но код, который я написал, просто не работает так же! А. к. а. Я рассматривал TCHAR * как char *, насколько я знаю, это не должно вызывать проблем, но на VS 2010 преобразование не происходит. Код размещен ниже.

int ftp_send(char* filename, TCHAR* path) {     
FILE *fPtr,*fp;     
char s[128],*loc=NULL;
char command1[1024];
char log[1024];
char systemcom[2048];
char name1[1024];
int success = 0;

sprintf_s(command1, 1024, "open 127.0.0.1\nbear\nitriv100\nbinary\nprompt\nmput %s\\rev%s*\n\nbye\n", path, filename);
sprintf_s(log, 1024, "%s\\log.txt", path);
sprintf_s(name1, 1024, "%s\\ftp.txt", path);
sprintf_s(systemcom, 2048, "ftp -s:%s -d | find\"226\"  >  %s", name1, log);
//printf("%s\n%s\n%s\n", systemcom, name1, log);
fopen_s(&fp, name1, "w+"); 
fprintf(fp,command1);

fclose(fp);

while(!success){
    system(systemcom);
    fopen_s(&fPtr, log, "r");
    if (!fPtr) {         
        printf("open file failure...\n");         
        return -1;     
    }          
    while (fgets(s, 128, fPtr) != NULL) { 
        loc = strstr(s, "226");
        if(loc != NULL) {     
            printf("File rev%s completely!!\n",filename);
            success = 1;
            return 0; 
        }
    }   
fclose(fPtr);
}
return -1;
}

Заранее спасибо.

Константин

Ответы [ 3 ]

3 голосов
/ 02 августа 2011

Скорее всего, проблема в том, что ваш проект VS 2008 был основан на Multibyte CharacterSet, а проект VS 2010 основан на UNICODE.

Щелкните правой кнопкой мыши Проект-> Свойства-> Общие-> Набор символов

Измените его на ' Использовать многобайтовый набор символов '.

В качестве альтернативы, если вы хотите сохранить свой код UNICODE, добавьте _T перед всеми строками, которые вы определяете.

3 голосов
/ 02 августа 2011

TCHAR! = Char и 'TCHAR *'! = 'Char *' это определение для типа данных 'char' или типа данных 'wchar_t' в зависимости от макроса UNICODE или _UNICODE.

, которые вы можете использовать 'TCHAR 'вместо' char 'в вашем коде, и замените функции типа' sprintf_s 'на их аналог TCHAR, например,' _stprintf_s ', определенный в

0 голосов
/ 02 августа 2011

Вы, наверное, где-то определили UNICODE.Отметьте Character Set в Свойствах проекта.Исправление должно привести к компиляции кода.

Вы могли бы избежать этой проблемы, правильно используя TCHAR и связанные с ней функции, вместо предположения TCHAR = char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...