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(hwnd, NULL, "AfxOleControl42", NULL);
//Obtengo un puntero a dicho componente con su handle
TAddFlow* paf = (TAddFlow*)FindControl(hwnd);
if(paf!=NULL) {
paf->SaveImage(afTypeMediumFile, afWMF, WideString("\\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 hinst, unsigned long reason, void* lpReserved)
{
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;