Ver Mensaje Individual
  #11 (permalink)  
Antiguo 26/02/2015, 13:30
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Problemas con IPictureDisp en C++Builder

Cita:
Iniciado por eferion Ver Mensaje
También puedes "trampear" tu código para que solucione ese problema y evitas tener que recompilar esa librería... pero en ese caso tendrás que estar pendiente cuando cambies de versión de borland para eliminar esa trampa si resulta que el error ya está corregido.
Amigo ya he conseguido obtener la imagen desde el componente pero sigo con el problema de los 8 bytes de mas y ni siquiera pasa por la funcion que indican en la funcion que habia que parchear. El problema tiene que estar en otro lugar y no tengo ni idea. Te pongo como queda el codigo para guardar la imagen en un archivo a espensas de poder solucionar lo de los 8 bytes:
Código PHP:
void __fastcall TFormMain::ButtonSaveImageClick(TObject *Sender)
{
   
//ShowMessage("Esta opcion no es funcional por ahora.");

   
TPicture *pic;
   
_di_IPictureDisp pIPD;
   
bool error false;

   try
   {
      
pic = new TPicture//Solicito memoria para el TPicture
   
}catch(std::bad_alloc&){
      
error true;
   }

   if(
error == true){
      
ShowMessage("No hay memoria suficiente para realizar esta acción.");
   }else{
      try
      {
         
//ExportPicture devuelve un IPictureDisp** y quiero pasarlo a un _di_IPictureDisp
         
pIPD = (IPictureDisp*)AddFlow1->ExportPicture(afAllItemstruetrue);

         
SetOlePicture(picpIPD); //Paso la imagen del IPictureDisp al TPicture

         
SaveDialog1->Filter "Enhanced Metafile Format|*.emf";
         if(
SaveDialog1->Execute()){
            
SaveDialog1->FileName ChangeFileExt(SaveDialog1->FileName".emf");
            
pic->SaveToFile(SaveDialog1->FileName);
         }
      }catch(...){
         
ShowMessage("Fallo al copiar la imagen al portapapeles.");
      }
      
delete pic//Libero la memoria del TPicture
   
}