Arquivo de recursos, erro ao compilar.

37 views
Skip to first unread message

dede.exe

unread,
Jul 1, 2009, 1:18:05 AM7/1/09
to ccppbrasil
Olá a todos...
Comecei a pouco a estudar programação em C voltada para Windows. Estou
usando como base o livro "Programação em C para Windows" do autor
"Eduardo Montgomery Meira Costa". Lembro que antes de vir procurar
ajuda, estou a pelo menos 8 horas nas graça do google, ccppbrasil-
wiki, msdn e outros meios de informação na tentativa de resolver este
problema.

menu.h:

#ifndef MENU_H_INCLUDED
#define MENU_H_INCLUDED

#define IDM_AZUL 0
#define IDM_CIANO 1
#define IDM_VERDE 2
#define IDM_PRETO 3
#define IDM_BRANCO 4
#define IDM_VERMELHO 5

#define IDM_MSG1 10
#define IDM_MSG2 11
#define IDM_MSG3 12

#define IDM_SAIR 20
#define IDM_MOSTRARB 30
#define IDM_ESCB 31

#define IDTB_BMP 300
#define IDM_TOOLBAR 200

#endif

======================================================

menu.rc:
#include "menu.h"

IDTB_BMP BITMAP "toolbarmenu.bmp"

Menu MENU {

POPUP "&Cor" {
MENUITEM "A&zul\t^Z", IDM_AZUL
MENUITEM "C&iano\t^A", IDM_CIANO
MENUITEM "Ve&erde\t^R", IDM_VERDE
POPUP "Mais Cores" {
MENUITEM "&Preto\t^P", IDM_PRETO
MENUITEM "&Branco\t^B", IDM_BRANCO
MENUITEM "&Vermelho\t^V", IDM_VERMELHO
}
}

POPUP "&Mensagens" {
MENUITEM "Mensagem &1\t^F1", IDM_MSG1
MENUITEM "Mensagem &2\t^F2", IDM_MSG2
MENUITEM "Mensagem &3\t^F3", IDM_MSG3
}

MENUITEM "&Sair -> ^S", IDM_SAIR

POPUP "&Botoes" {
MENUITEM "&Mostrar\t^M", IDM_MOSTRARB
MENUITEM SEPARATOR
MENUITEM "&Esconder\t^E", IDM_ESCB
}

}

Menu ACCELERATORS {
"^Z", IDM_AZUL
"^A", IDM_CIANO
"^R", IDM_VERDE
"^P", IDM_PRETO
"^B", IDM_BRANCO
"^V", IDM_VERMELHO
VK_F1, IDM_MSG1, VIRTKEY
VK_F2, IDM_MSG2, VIRTKEY
VK_F3, IDM_MSG3, VIRTKEY
"^S", IDM_SAIR
"^M", IDM_MOSTRARB
"^B", IDM_ESCB
}


Não coloquei o arquivo menu.c, pois o mesmo possui 300 linhas e acho
que seria muito grande pra colocar. tudo o que sei é que o erro é
sempre no arquivo de recursos(menu.rc)

Ao tentar compilar aparece o seguinte erro:

C:\Users\dedesan\DOCUME~1\Estudos\C\PROGRA~1\cap03\menu\menu.rc|41|
syntax error|
||preprocessing failed.|
||=== Build finished: 2 errors, 0 warnings ===|

a linha indicada no erro é referente ao seguinte trecho:
VK_F1, IDM_MSG1, VIRTKEY

Se este for comentado irá apontar para as duas linhas seguintes
semelhantes a linha acima.
Mas, se as 3 linhas forem comentadas..

o erro que aparece é somente isto

||preprocessing failed.|
||=== Build finished: 1 errors, 0 warnings ===|

sem indicação de linha de erro, apenas indicando que houve um erro na
construção...

fiz vários testes no arquivo de recursos... apaguei todo o conteudo do
arquivo, apaguei trechos distintos e tudo o que pude imaginar, porém,
quando removi o arquivo de recursos do projeto, consegui compilar
normalmente e executar o programa. Claro, que o preço disto foi não
ter a barra de menu superior...

Por isto agora coloco a mão no peito e peço com humildade...
senhores... poderiam me ajudar?
Obrigado.

Bruno Binelli

unread,
Jul 1, 2009, 8:23:15 AM7/1/09
to ccppb...@googlegroups.com
Você colocou quebra de linha na linha:
 
#endif
 
do arquivo menu.h ?

2009/7/1 dede.exe <dede...@gmail.com>

dede.exe

unread,
Jul 1, 2009, 12:50:52 PM7/1/09
to ccppbrasil
sim... coloquei.. quebra de linha no final do arquivo, aliás, todos os
arquivos tem quebra de linha no final...

Lembrando que estou usando o Code::blocks...

Fiz testes hj ainda com o Dev-C++ e deram os mesmos problemas. A
diferença é que quando comento as linhas das teclas virtuais ele
compila normalmente, mas apresenta uma mensagem de erro ao abrir a
aplicação e a fecha...

Estou utilizando a seguinte estrutura:
Dev-C++ / Code::blocks + Windows XP


On 1 jul, 09:23, Bruno Binelli <brunobine...@gmail.com> wrote:
> Você colocou quebra de linha na linha:
>
> #endif
>
> do arquivo menu.h ?
>
> 2009/7/1 dede.exe <dede....@gmail.com>

Paulo Rogério Panhoto

unread,
Jul 1, 2009, 1:15:49 PM7/1/09
to ccppb...@googlegroups.com
Só por curiosidade, qual compilador você está usando?? Testei com o
Visual C++ 9 Express e funcionou. Segue a referência sobre aceleradores
do MSDN: <http://msdn.microsoft.com/en-us/library/aa380610(VS.85).aspx
<http://msdn.microsoft.com/en-us/library/aa380610%28VS.85%29.aspx>>

Com os arquivos originais (menu.h e menu.rc), obtive uma mensagem de erro:

C:\tmp>rc menu.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
Copyright (C) Microsoft Corporation. All rights reserved.

menu.rc(41) : error RC2104 : undefined keyword or key name: VK_F1

Inclui as defininições dos virtkeys em menu.h

#define VK_F1 0x70
#define VK_F2 0x71
#define VK_F3 0x72

E, no fim, ele compilou.

C:\tmp>rc menu.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
Copyright (C) Microsoft Corporation. All rights reserved.


C:\tmp>dir *.res
O volume na unidade C não tem nome.
O número de série do volume é 0CF2-82F0

Pasta de C:\tmp

01/07/2009 14:10 644 menu.res
1 arquivo(s) 644 bytes
0 pasta(s) 72.444.911.616 bytes disponíveis

Bruno Binelli

unread,
Jul 1, 2009, 1:19:25 PM7/1/09
to ccppb...@googlegroups.com
Testei com o Visual C++ 6.0 (incluindo as definições das virutal keys) e também compilou sem problemas.

2009/7/1 Paulo Rogério Panhoto <pa...@voicetechnology.com.br>

dede.exe

unread,
Jul 1, 2009, 3:04:09 PM7/1/09
to ccppbrasil
Estou usando o MinGW

Paulo Rogério Panhoto

unread,
Jul 1, 2009, 3:36:01 PM7/1/09
to ccppb...@googlegroups.com
Pode ser problema com o windres. Você poderia refazer a pergunta no forum do MinGW.

dede.exe

unread,
Jul 1, 2009, 6:40:34 PM7/1/09
to ccppbrasil
Senhores... só sei do seguinte quando coloquei as definições de vk_f1,
vkf2 e vk_f3 no arquivo de cabeçalho

quando rodei o programa junto com o DEV-C++ funcionou legal... mas
quando rodei no CODE:BLOCKS continou a dar o erro que descrevo mais
acima caso eu comentasse as 3 linhas... No Visual C++ também funcionou
legal... Não tenho a mínima ideia porque não tenha funcionado no CB,
mas ta okm já q a instalação tanto dele(CBlocks) quanto do DEV vem com
mingw ou gcc como padrao...

obrigado

Paulo Rogério Panhoto

unread,
Jul 3, 2009, 10:53:51 AM7/3/09
to ccppb...@googlegroups.com
A título de curiosidade, achei esta página aqui (uma breve referência do .rc para o windres) em <http://cygwin.com/1.7/cygwin-ug-net/windres.html>.

esta página descreve os aceleradores desta forma:

id ACCELERATORS suboptions
BEG
"^C" 12
"Q" 12
65 12
65 12 , VIRTKEY ASCII NOINVERT SHIFT CONTROL ALT
65 12 , VIRTKEY, ASCII, NOINVERT, SHIFT, CONTROL, ALT
(12 is an acc_id)
END
baseado nesta decrição, você poderia mudar as três linhas para:
VK_F1  IDM_MSG1,       VIRTKEY
VK_F2  IDM_MSG2,       VIRTKEY
VK_F3  IDM_MSG3,       VIRTKEY

(sem a primeira vírgula)

2009/7/1 dede.exe <dede...@gmail.com>

Guilherme Longo

unread,
Jul 5, 2009, 8:12:03 AM7/5/09
to ccppb...@googlegroups.com
Pessoal, bom dia.

Estou com difiduldades para entender essa linha de codigo:

buffer = (char *)malloc(1024);

A parte que eu nao entendo e esse ponteiro char... qual a sua funcao??

Muito obrigado!

Eric Chiesse

unread,
Jul 5, 2009, 10:04:30 AM7/5/09
to ccppbrasil
Oi Guliherme,

"malloc" retorna "void*". Normalmente isso em C não é problema mas em C
++ não vai compilar pois ele não vai fazer a conversão implícita, por
isso precisa de uma conversão explicita para "char*".

Se é em C++ e você puder mexer no código, então você pode usar: buffer
= new char[1024];

Mais duas dicas para você que está começando:
1 - Não é bom usar números soltos no código. O melhor é definir uma
constante e usar a constante. Ex:
const uint BUFFER_SIZE = 1024;
buffer = new char[BUFFER_SIZE];

2 - Não esqueça de liberar a memória:
Para malloc, depois chame o free. Ex: free(buffer);
Para new, depois chame o delete. Ex: delete[] buffer;

Abraço.

Eric.

Bruno Sanches

unread,
Jul 6, 2009, 8:27:15 AM7/6/09
to ccppb...@googlegroups.com
Guilherme,

além da explicação do Eric, talvez esse artigo lhe ajude a entender o conceito de casting:

T+

Bruno Sanches
========================
http://bcsanches.wordpress.com


2009/7/5 Eric Chiesse <echi...@gmail.com>

Alex Queiroz

unread,
Jul 6, 2009, 9:15:37 AM7/6/09
to ccppb...@googlegroups.com
Hallo,

Guilherme, para voce o mais proveitoso, *muito* mais proveitoso,
seria estudar algum livro basico de C. Tenho calafrios imaginando o
codigo que esta' sendo escrito quando vejo perguntas assim chegando na
lista. Com isso nao quero dizer que existem perguntas que nao devem
ser feitas, apenas que para o bem do seu programa voce precisa de mais
conhecimentos basicos.

--
-alex
http://www.ventonegro.org/

Guilherme Longo

unread,
Jul 6, 2009, 5:52:12 PM7/6/09
to ccppb...@googlegroups.com
Pois é Alex vou tentar colocar isso da melhor forma possivel:

O que é um casting eu entendo, mas acontece que as vezes a forma como o
código de outras pessoas são feitos, pode parecer as vezes confuso.
Alias, cada programador com seu estilo.

Antes de postar, pode ter certeza que procuro tanto on-line como em
livros que tenho. E não se assuste quando chegarem perguntas como essa.
Pessoas utilizam códigos alheios para estudar tb. Esse código é de um
programa que **não é meu**, funcional... então nada a temer. É só uma
questão de aprendizado. Alias a lista tb serve para tirarmos nossas
dúvidas em momentos que não achamos respostas em outras fontes.


Obrigado pela opinião.
T+

Reply all
Reply to author
Forward
0 new messages