Eu tenho um projeto win32 que carreguei no Visual Studio 2005. Gostaria de poder imprimir coisas na janela de saída do Visual Studio, mas não consigo descobrir como. Eu tentei 'printf' e 'cout <<', mas minhas mensagens permanecem teimosamente não impressas.
Existe algum tipo de maneira especial de imprimir na janela de saída do Visual Studio?
Respostas:
Você pode usar
OutputDebugString
.OutputDebugString
é uma macro que, dependendo das opções de construção, mapeia paraOutputDebugStringA(char const*)
ouOutputDebugStringW(wchar_t const*)
. No último caso, você terá que fornecer uma ampla cadeia de caracteres para a função. Para criar um literal de caractere largo, você pode usar oL
prefixo:Normalmente, você usará a versão macro junto com a
_T
macro, como este:Se o seu projeto estiver configurado para construir para UNICODE, ele se expandirá para:
Se você não estiver construindo para UNICODE, ele se expandirá para:
fonte
myStr
. Échar*
,wchar_t*
ouLPTSTR
? Assumindo que échar*
que você simplesmente chamarOutputDebugStringA(myStr)
ou usarOutputDebugStringW
comwchar_t*
eOutputDebugString
comLPTSTR
como explicado na minha resposta.OutputDebugString
e defina os símbolos apropriados do pré-processador para coincidir com a largura dos caracteres que você usa ou vá com os tipos "T" flexíveis que permitem que você compile para caracteres de 8 e 16 bits.Se o projeto for um projeto GUI, nenhum console aparecerá. Para transformar o projeto em um console, você precisa ir ao painel de propriedades do projeto e definir:
Esta solução funciona apenas se você tiver o clássico " ponto de entrada int main () ".
Mas se você for como no meu caso (um projeto openGL), você não precisa editar as propriedades, pois funciona melhor:
printf e cout funcionarão normalmente.
Se você chamar AllocConsole antes da criação de uma janela, o console aparecerá atrás da janela, se você chamá-lo depois, ele aparecerá à frente.
Atualizar
freopen
está obsoleto e pode não ser seguro. Use em seufreopen_s
lugar:fonte
EDITBIN
pode definir subsistema paraCONSOLE
até mesmo se você estiver usando emWinMain
vez deint main()
.Para imprimir no
real
console, você precisa torná-lo visível usando o sinalizador do vinculador/SUBSYSTEM:CONSOLE
. A janela extra do console é irritante, mas para fins de depuração é muito valiosa.OutputDebugString
imprime na saída do depurador ao executar dentro do depurador.fonte
Considere o uso de macros de tempo de execução VC ++ para Reporting _RPT N () e _RPTF N ()
Exemplo...
Ou você pode usar as funções de tempo de execução do VC ++ _CrtDbgReport, _CrtDbgReportW diretamente.
fonte
_RPTF0
pode ser usado onde não se espera que nenhuma variável seja passada após a string de formato. A_RPTFN
macro, por outro lado, requer pelo menos um argumento após a string de formato.Se você deseja imprimir variáveis decimais:
fonte
Se você precisar ver a saída de um programa existente que usou extensivamente printf sem alterar o código (ou com alterações mínimas), você pode redefinir printf como segue e adicioná-lo ao cabeçalho comum (stdafx.h).
fonte
Seu projeto Win32 é provavelmente um projeto de GUI, não um projeto de console. Isso causa uma diferença no cabeçalho executável. Como resultado, seu projeto de GUI será responsável por abrir sua própria janela. Isso pode ser uma janela de console, no entanto. Chame
AllocConsole()
para criá-lo e use as funções do console Win32 para gravá-lo.fonte
Eu estava procurando uma maneira de fazer isso sozinho e descobri uma solução simples.
Presumo que você tenha iniciado um projeto Win32 padrão (aplicativo do Windows) no Visual Studio, que fornece uma função "WinMain". Por padrão, o Visual Studio define o ponto de entrada como "SUBSYSTEM: WINDOWS". Você precisa primeiro alterar isso indo para:
Projeto -> Propriedades -> Vinculador -> Sistema -> Subsistema
E selecione "Console (/ SUBSYSTEM: CONSOLE)" na lista suspensa.
Agora, o programa não será mais executado, pois uma função "principal" é necessária em vez da função "WinMain".
Portanto, agora você pode adicionar uma função "principal" como faria normalmente em C ++. Depois disso, para iniciar o programa GUI, você pode chamar a função "WinMain" de dentro da função "principal".
A parte inicial do seu programa deve ser semelhante a esta:
Resultado da minha implementação
Agora você pode usar funções de saída para o console em qualquer parte de seu programa GUI para depuração ou outros fins.
fonte
Você também pode usar o método WriteConsole para imprimir no console.
fonte