• Viernes 8 de Noviembre de 2024, 10:14

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - MON___

Páginas: [1]
1
C++ Builder / Error "einvalidpointer"
« en: Martes 29 de Enero de 2008, 21:36 »
Espero haber acertado con la sección, pues mi consulta tiene que ver tanto con DELPHI como con C++ BUILDER.
Se trata de una llamada a una función de una DLL; muestra una ventana con un objeto TListBox; si se pulsa el botón ACEPTAR la función devuelve TRUE y los valores contenidos en el objeto TListBox. Sin embargo la aplicación (en DELPHI) me devuelve la excepción EInvalidPointer.
CÓDIGO DE LA DLL (C++)
Código: Text
  1.  
  2. extern "C" _declspec(dllexport) bool _stdcall SeleccionarValores(char *buffer);
  3. bool _stdcall SeleccionarValores(char *buffer){
  4.         bool resultado = FALSE;
  5.         Application->CreateForm(__classid(TFVentana), &FVentana);
  6.         try{
  7.            FVentana->ListBox1->Items->Add("PRIMAVERA");
  8.            FVentana->ListBox1->Items->Add("VERANO");
  9.            FVentana->ListBox1->Items->Add("OTOÑO);
  10.            FVentana->ListBox1->Items->Add("INVIERNO");
  11.            resultado = (FVentana->ShowModal == mrOk);
  12.            if (resultado){
  13.            int x;
  14.            x = SendMessage(FVentana->ListBox1->Handle, WM_GETTEXTLENGTH, 0, 0);
  15.            x++;
  16.            buffer = StrAlloc(x);
  17.            buffer = FVentana->ListBox1->Items->GetText();
  18.            }
  19.          }
  20.          __finally{
  21.          delete FVentana;
  22.        }
  23.         return  resultado;
  24. }
  25.  
  26.  
CÓDIGO DEL EXE (DELPHI)
Código: Text
  1.  
  2. procedure TForm1.Button2Click(Sender: TObject);
  3.   type
  4.     TLlamarDLL = function(buffer : PChar):boolean;stdcall;
  5.   var
  6.     LlamarDLL : TLlamarDLL;
  7.     DLL : THandle;
  8.     buffer : pchar;
  9.  begin
  10.    DLL := LoadLibrary('LIBRERIA.DLL');
  11.    if DLL > 0 then
  12.     begin
  13.      @LlamarDLL := GetProcAddress(DLL, 'SeleccionarValores');
  14.     if not(@LlamarDLL = nil) then    
  15.     begin        
  16.         LlamarDLL(buffer);        
  17. // Los valores que se mostraban en el LISTBOX de la DLL los "guardo" en el TCOMBOBOX de la aplicación
  18.         ComboBox1.Items.SetText(buffer);
  19.         StrDispose(buffer);
  20.     end;
  21.    FreeLibrary(DLL);
  22.    end;
  23. end;
  24.  
  25.  
¿Alguien me puede señalar dónde está el error?
Un saludo para todos.

Páginas: [1]