2013-03-05 5 views
0

У меня есть вопрос о VC++ если и скомпилировать этот код в VC++:VC++ vs. G ++, соиЬ

#include "stdafx.h" 
#include <stdlib.h> 
//#include <stdio.h> 
#include <iostream> 
#include <Windows.h> 

TCHAR lpBuffer[MAX_PATH]; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    DWORD dwBufferLength = 0; 
    if(!(dwBufferLength = GetWindowsDirectory(lpBuffer, MAX_PATH))) 
     std::cout << "Last error : "<< GetLastError() << std::endl; 
    else{ 
     std::cout << lpBuffer << std::endl; 
     /*for(DWORD i = 0; i < dwBufferLength; i++) 
      printf("%c", lpBuffer);*/ 
     std::cout << std::endl; 
    } 

    system("PAUSE"); 
    return 0; 
} 

я вижу только "C", и если я скомпилировать его г ++ я буду видеть «C: \ Windows "в чем проблема? уверен, что я должен удалить первую строку "#include "stdafx"" под г ++ :)

и изменения "_tmain" в "основной"^__^

+0

G ++ распознает функцию '_tmain' как функцию запуска? –

+0

nope, я должен написать 'main' :) thank u i изменит его в моем вопросе :) –

+1

Вы отправляете широкую строку, строку Unicode, в cout. Вместо этого вы должны использовать wcout. G ++ не очень широк. Вы можете вернуть часы в 1980-е годы с помощью Project + Properties, General, Character set = Multi-Byte. –

ответ

1

После исправления кода:

#include <iostream> 
#include <Windows.h> 

int main() { 
    char lpBuffer[MAX_PATH]; 
    DWORD dwBufferLength = 0; 

    if(!(dwBufferLength = GetWindowsDirectory(lpBuffer, MAX_PATH))) 
     std::cout << "Last error : "<< GetLastError() << std::endl; 
    else 
     std::cout << lpBuffer << "\n"; 
    return 0; 
} 

Я получаю идентичные результаты («C: \ windows») как с VC++ (2012), так и с gcc 4.7.2 (MinGW).

+0

Вы должны добавить '#include" stdafx ", потому что он работает на VC++, я не вижу« C », я вижу «00ABF608» !!!!!!!! –

+0

У меня есть VC++ 2010 Express !!!!! ;) –

+0

@LaVloZ Нет, вам не нужно включать * stdafx.h * для компиляции под VC; вы можете перейти к свойствам проекта и отключить опцию предварительно скомпилированных заголовков в настройках компилятора. Джерри, может быть, вы должны явно вызвать «GetWindowsDirectoryA», так как вы не используете какой-либо материал TCHAR. Это сделает код корректным, даже если OP имеет _UNICODE. – Praetorian

Смежные вопросы