| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
philips Capt

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Lun 09 Abr, 2007 1:05 pm Asunto: [C++ Warning] _str.h(190): W8058 Cannot create pre-compiled |
|
|
Por si fuera poco el otro warning que he posteado aqui estoy con otro mas
Estos warnings han aparecido desde que he agregado una dll a mi programa
Esta dll la he agregado siguiendo los pasos descritos por Leo en un ejemplo de este mismo foro
He agregado al programa que usa la dll la libreria correspondiente que el propio Builder 2006 me crea
El programa funciona correctamente, pero quisiera saber si es que me he olvidado de añadir algo en la dll o en el programa principal
saludos
phil |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
philips Capt

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Dom 20 May, 2007 1:19 am Asunto: |
|
|
Gracias Leo por la ayuda
Tengo un duende sobre el que ya he consultado y me ha respondido César, pero no consigo encontrar que es.
Se trata de este warning:
[C++ Warning] Unit1.h(552): W8027 Functions containing switch are not expanded inline
Cuando hago click en el error me remarca en rojo la linea de "BEGIN_MESSAGE_MAP"
void __fastcall TForm1::WMCambioEnDispositivo(TMessage &msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,WMCambioEnDispositivo);
END_MESSAGE_MAP(inherited)
La cabecera de la clase es esta:
class TForm1 : public TForm
{
__published: // IDE-managed Components
No logro saber que causa este warning tan raro.
Te agradeceria me orientases sobre que y donde poder buscar este duende
phil |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 20 May, 2007 2:03 am Asunto: |
|
|
La ayuda del BCB lo explica seguramente mejor que yo. Nos quiere decir que hay varias palabras reservadas, entre ellas "switch" que no pueden ser expandidas en línea, incluso cuando se utiliza la palabra reservada "inline". Lo que hará es crear una copia de la función por cada vez que esta cabecera sea incluida.
La macro "BEGIN_MESSAGE_MAP" está en la cabecera "sysmac.h" y esto es lo que pone (aquí se ve como usa la palabra reservada "switch"):
| Código: | #define BEGIN_MESSAGE_MAP virtual void __fastcall Dispatch(void *Message) \
{ \
switch (((PMessage)Message)->Msg) \
{ |
La razón por la que te aparece es porque seguramente en las opciones del proyecto has seleccionado la opción de compilar como "Release" en vez de "Debug".
Puedes o bien deshabilitar este aviso en las opciones del proyecto:
Project -> Options... -> Pestaña: Compiler
Marca el checkbox: [x] Disable inline expansions
O bien por código poniendo la siguiente línea antes del bloque donde te interese deshabilitar temporalmente este aviso:
#pragma option -vi-
| Código: | void __fastcall WMCambioEnDispositivo(TMessage &msg) {};
// Deshabilitamos temporalmente el aviso
#pragma option -vi-
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, WMCambioEnDispositivo);
END_MESSAGE_MAP(inherited)
// Lo volvemos a dejar como estaba originalmente
#pragma option -vi.
// o bien sin el punto del final que forzaria su habilitación |
|
|
| Volver arriba |
|
 |
philips Capt

Registrado: 16 Nov 2005Mensajes: 154
|
Publicado: Dom 20 May, 2007 12:30 pm Asunto: |
|
|
En la pestaña Debugging he desmarcado la opción "Inline fuction expansion (-vi) y ya no me aparece el dichoso Warning
Que descanso
Muchisimas gracias Leo
Phil |
|
| Volver arriba |
|
 |
|