Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Error Ambiguity con GdiPlus

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Error Ambiguity con GdiPlus Responder citando

Hola,

Quiero utilizar el gdiplus. Lo que he hecho de momento es añadir al proyecto (bds 2006 en xp) la libreria: gdiplus.lib que trae el mismo builder.

En el fichero de cabecera del form añado:
Código:

#define STRICT
#include <windows.h>
#include <algorithm>
using std::min;
using std::max;
#include <gdiplus.h>

Segun: http://www.leunen.com/cbuilder/gdiplus.html

No tengo nada mas de codigo.

Y al compilar me da el siguiente error:

[C++ Error] GdiplusGraphics.h(34): E2015 Ambiguity between 'Gdiplus::Graphics::Graphics(void *)' and 'Gdiplus::Graphics::Graphics(void *,int)'

Este fichero donde da error: GdiplusGraphics.h viene con el mismo builder, asi que no quiero tocarlo.

No se como solucionarlo. Necesito vuestra ayuda. Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

holas

eso sale cuando hay funciones sobrecargadas ( function overload) ..y el compiler no sabe a que funcion llamar.. y requiere que de alguna forma le especifiques de manera explicita cual funcion exactamente es la que quieres llamar

ami me ha salido un par de veces cuando me piden una string y pongo "blabla" y hay 2 funciones sobrecargadas una que pide WideString y otra AnsiString y le tengo que poner (WideString)"blabla" para que sepa cual exactamente o casos por el estilo.. aunque por el momento no estoy 100% seguro.. sera cosa de investigar un poco...

espero que cuando menos te haya dado una idea de lo que intente decir hehehe


Saludos! Very Happy
_________________
Hermes David Montes de oca Segovia
dodongoxp@yahoo.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

En el BCB2006 no es necesario que pongas todo eso, puedes usar solo el include "gdiplus.h" y STRICT ponlo globalmente, en las propiedades del proyecto en "Conditional defines".

Para localizarlo:

MENU: Project -> Options...
TREEVIEW: C++ Compiler (bcc32) -> Paths and Defines
EDIT: Conditional defines (-D)

A mi haciendolo así me funcionan los ejemplos de esa web.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Supongo que para utilizar las librerías en BCB6 Enterprise el método a seguir es diferente. Gracias al enlace que ha dejado kalux y a "san google" he seguido los siguientes pasos:
1º- He generado el archivo .lib necesario con
implib -c -f gdiplus.lib gdiplus.dll y luego lo he pegado en el directorio lib de mi BCB.

2º- En el .cpp de mi proyecto:
Código:

//---------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <algorithm>
using std::min;
using std::max;
#include <gdiplus.h>
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
// Initialize GDI+.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
//shutdown GDI+
Gdiplus::GdiplusShutdown(gdiplusToken);
}
//---------------------------------------------------------------------------

3º- En la parte privada del archivo .h:
Código:

Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR  gdiplusToken;

4º- He añadido al proyecto el archivo gdiplus.lib.
5º- Project ->Options ->Directories/Conditionals y en el apartado Conditional defines: he añadido STRICT.

Pues no hay manera, al ejecutar el proyecto me da los siguientes mensajes:
Código:

[C++ Warning] GdiplusHeaders.h(582): W8022 'Bitmap::Clone(const Rect &,int)' hides virtual function 'Image::Clone()'
[Linker Error] Unresolved external 'GdiplusStartup' referenced from C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
[Linker Error] Unresolved external 'GdiplusShutdown' referenced from C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

¿Alguien tiene experiencia con estas librerías y las ha hecho funcionar con BCB6 ?
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Tugui: Seguramente no estás creando correctamente el .LIB o no lo has añadido correctamente al proyecto. Te has fijado si al hacerlo en la consola te ha devuelto algún mensaje de error ? Si es así te creara un .LIB vacio.

Si tienes instalado WindowsXP en C:\Windows, no te olvides de poner la ruta:

implib -c -f gdiplus.lib c:\windows\system32\gdiplus.dll
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo, ahora si.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Bueno... al principio si, gracias otra vez a _Leo escribiendo la ruta completa en la línea de comando se ha compilado un par de veces el proyecto pero con un warning, y al tercer intento ya ni eso, ya me ha saltado otro error:
Código:

[C++ Warning] GdiplusHeaders.h(582): W8022 'Bitmap::Clone(const Rect &,int)' hides virtual function 'Image::Clone()'
[Linker Error] Error processing module C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\LIB\STLPMTI.LIB|STLPMT45.DLL

Todas estas pruebas las estoy haciendo con un proyecto totalmente nuevo y compilando el formulario principal totalmente vacío. Ya no se que pensar, probaré en otro ordenador a ver si tengo más suerte.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola ahora me toca preguntar a mi, jeje

Estoy usando el BDS2006, alguien sabe el por que de esta situacion al compilar una libreria, he realizado una DLL con funciones propias, sigiendo los pasos de _Leo, para hacer las DLL's

pero me sale el siguiente error

Código:
[Linker Error] Error: Unresolved external 'Jpeg::TJPEGImage::' referenced from D:\H2W\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ



Este es el archivo de la Dll ccsgDll.h

Código:

#ifndef dllH__ccsg
#define dllH__ccsg
//----------------------
#ifdef _ccsgDLL_
#define ccsgPUBLIC  __declspec(dllexport)
#else
#define ccsgPUBLIC  __declspec(dllimport)
#endif
//----------------------
// ENCABEZADOS DE FUNCIONES
#include <IBCustomDataSet.hpp> // para las bases de datos
#include <jpeg.hpp> // PARA LAS IMAGENES
#include <ScktComp.hpp>  // PARA LOS SOCKETS
ccsgPUBLIC TMemoryStream * __fastcall ImagenToStream(AnsiString Nombre_y_Ruta);
ccsgPUBLIC TJPEGImage* __fastcall BlobToJpg(TBlobField *CampoBLOB);
#endif


bien este es el codigo, del archivo ccsgDll.cpp

Código:

//---------------------------------------------------------------------------
#include <vcl.h>
#define _ccsgDLL_

#include "ccsgDll.h"
#include <memory>
#include <stdio.h>
#include <jpeg.hpp>

#pragma hdrstop
#pragma argsused
//USERES("pccsgDll.res");
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   return 1;
}

//---------------------------------------------------------------------------
// CARGA UNA IMAGEN Y REGRESA UN STREAM
//---------------------------------------------------------------------------
ccsgPUBLIC TMemoryStream * __fastcall ImagenToStream(AnsiString Nombre_y_Ruta)
{
   Jpeg::TJPEGImage          *jpg = new Jpeg::TJPEGImage();
   TMemoryStream *StreamTmp = new TMemoryStream;
   AnsiString Ext = ExtractFileExt(Nombre_y_Ruta);
   if(UpperCase(Ext.Trim()) == ".GIF" ||  //imagen GIF
      UpperCase(Ext.Trim()) == ".WMF" ||  // wmf
      UpperCase(Ext.Trim()) == ".EMF" || // emf
      UpperCase(Ext.Trim()) == ".ICO" || // ICO
      UpperCase(Ext.Trim()) == ".BMP" || //bmp
      UpperCase(Ext.Trim()) == ".JPG" || // jpg
      UpperCase(Ext.Trim()) == ".JPEG"   // jpeg
      //UpperCase(Ext.Trim()) == ".PNG"  //  jeje
      )
   {
      TImage *imagen = new TImage(NULL);
      const int HIMETRIC_INCH   = 2540;
      IPicture *pPicture = NULL;
      OleLoadPicturePath( StringToOleStr(Nombre_y_Ruta), NULL, 0, 0, IID_IPicture, (void**)&pPicture);
      // Carga la imagen en el TImage temporal
      if (pPicture)
      {
         imagen->Picture = NULL;
         long ancho, alto;
         pPicture->get_Width(&ancho);
         pPicture->get_Height(&alto);
         imagen->Picture->Bitmap->Width = MulDiv(ancho,GetDeviceCaps(imagen->Canvas->Handle, LOGPIXELSX), HIMETRIC_INCH);
         imagen->Picture->Bitmap->Height = MulDiv(alto,GetDeviceCaps(imagen->Canvas->Handle, LOGPIXELSY), HIMETRIC_INCH);
         RECT rect = imagen->ClientRect;
         pPicture->Render(imagen->Canvas->Handle, 0, 0,imagen->Picture->Bitmap->Width, imagen->Picture->Bitmap->Height,0, alto, ancho, -alto, &rect);
         pPicture->Release();
         jpg->Assign(imagen->Picture->Bitmap);
         jpg->SaveToStream(StreamTmp);

      }
      delete imagen;
   }
   delete jpg;
    return(StreamTmp);

}
//---------------------------------------------------------------------------
// funcion que extrae una imagen contenida en un blob y la convierte a jpg
//---------------------------------------------------------------------------
ccsgPUBLIC TJPEGImage*  __fastcall BlobToJpg(TBlobField *CampoBLOB)
{
   if(!CampoBLOB->Value.IsEmpty())
   {
      TJPEGImage *cJPeg = new TJPEGImage();
      TMemoryStream *StreamTmp = new TMemoryStream;
      CampoBLOB->SaveToStream(StreamTmp); //sacamos el jpg y se convierte a stream
      StreamTmp->Seek(0,soFromBeginning);
      cJPeg->LoadFromStream(StreamTmp);
      return(cJPeg);
   }
   else
      return(NULL);
}
//---------------------------------------------------------------------------



pero al usar esta DLL dentro de un form, y declarar algo como esto


Código:
   TJPEGImage *c = new TJPEGImage;


me aparecen los siguientes mensajes


Cita:
[Linker Error] Error: Unresolved external 'Jpeg::TJPEGImage::' referenced from D:\H2W\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ
[Linker Error] Error: Unresolved external '__fastcall Jpeg::TJPEGImage::TJPEGImage()' referenced from D:\H2W\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ
[Linker Error] Error: Unresolved external '__fastcall AutoHideBarraTareas(int)' referenced from D:\H2W\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ


alguien le ha salido algo por el estilo
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Me autocontesto yo mismo, ,jajajajajjaja
Código:

IMPLIB LIB_DESTINO.LIB DLL_ORIGEN.DLL


_Leo sabes donde puedo deshabilitar o marcar esta opcion en el BDS2006 para que no este realizando esta operacion cadavez que tenga que recompilar la dll
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Cita:
_Leo sabes donde puedo deshabilitar o marcar esta opcion en el BDS2006 para que no este realizando esta operacion cadavez que tenga que recompilar la dll


Te refieres a que se cree o no automáticamente el .lib al compilar el proyecto de la DLL ?

MENU: Project -> Options...
TREEVIEW: Linker -> Linking
CHECKBOX: Generate import library
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Efectivamente, lo que trato es de implementar el lib, ya que al no hacerlo con IMPLIB me genera el error y me agradaria que al generar la DLL tambien el archivo LIB, fuera ya con la opcion IMPLIB.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.