Ver Mensaje Individual
  #7  
Antiguo 26-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Lo he probado en un ejemplo creado por mi y no me funciona. Tengo esto:

App:
Código PHP:
void __fastcall TForm1::AddDll()
{
   
//cargamos la Dll
   
Dll=LoadLibrary("DllSaveImageEdited.dll");
   if(!
Dll){
      
ShowMessage("No se encontró la Dll: DllSaveImageEdited.dll");
   }else{
      
//buscamos la funcion en la dll
      
Funcion = (LPFuncion)GetProcAddress(Dll"SaveImageEdited");
      if(!
Funcion){
         
ShowMessage("ERROR, no se encontró la función: SaveImageEdited");
      }else{
         
Funcion();//Ejecutamos la funcion de la dll

         
ButtonDesinstalarDll->Enabled true;
         
ButtonInyectarDll->Enabled false;
      }
   }

Dll:
Código PHP:
#include <windows.h>
#include "C:\\Archivos de programa\\Borland\\CBuilder6\\Imports\\AddFlow5Lib_OCX.h"
//---------------------------------------------------------------------------

#pragma argsused

/*******************************************************/
/*FUNCIÓN PARA INSTALAR/DESINSTALAR EL HOOK DEL TECLADO*/
/*******************************************************/
extern "C" __declspec(dllexport__stdcall int SaveImageEdited(void)
{
   
int retval;

   try
   {
      
//Para la prueba
      
HWND hwnd FindWindow("TForm1""Form1");
      
hwnd FindWindowEx(hwndNULL"AfxOleControl42"NULL);

      
//Obtengo un puntero a dicho componente con su handle
      
TAddFlowpaf = (TAddFlow*)FindControl(hwnd); 
      
      if(
paf!=NULL) {
         
paf->SaveImage(afTypeMediumFileafWMFWideString("\\DiagramaEditado.wmf"));
         
retval 0;
      }else{
         
MessageBoxA(NULL,"El puntero no es válido.""Error"MB_OK MB_ICONERROR);
         
retval = -2;
      }
   }
   catch(...)
   {
      
retval = -1;
   }
   return 
retval;
}
//---------------------------------------------------------------------------

int WINAPI DllEntryPoint(HINSTANCE hinstunsigned long reasonvoidlpReserved)
{
   return 
1;
}
//--------------------------------------------------------------------------- 
El control es de clase "AfxOleControl42" y consigo su hwnd sin problemas pero FindControl retorna 0, o sea que no me devuelve la direccion y por tanto se muestra el mensaje de que el puntero no es valido.
¿que puede estar fallando? ya digo que es una prueba que hice en C++builder tanto la app como la dll.

En la aplicacion el componente se declara:
Código PHP:
TAddFlow *AddFlow1
Responder Con Cita