Programación General > C++ Builder

 Error "einvalidpointer"

(1/2) > >>

MON___:
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 --- extern "C" _declspec(dllexport) bool _stdcall SeleccionarValores(char *buffer);bool _stdcall SeleccionarValores(char *buffer){        bool resultado = FALSE;        Application->CreateForm(__classid(TFVentana), &FVentana);        try{           FVentana->ListBox1->Items->Add("PRIMAVERA");           FVentana->ListBox1->Items->Add("VERANO");           FVentana->ListBox1->Items->Add("OTOÑO);           FVentana->ListBox1->Items->Add("INVIERNO");           resultado = (FVentana->ShowModal == mrOk);           if (resultado){           int x;           x = SendMessage(FVentana->ListBox1->Handle, WM_GETTEXTLENGTH, 0, 0);           x++;           buffer = StrAlloc(x);           buffer = FVentana->ListBox1->Items->GetText();           }         }         __finally{         delete FVentana;       }        return  resultado; }  CÓDIGO DEL EXE (DELPHI)

--- Código: Text --- procedure TForm1.Button2Click(Sender: TObject);  type    TLlamarDLL = function(buffer : PChar):boolean;stdcall;  var    LlamarDLL : TLlamarDLL;    DLL : THandle;    buffer : pchar; begin    DLL := LoadLibrary('LIBRERIA.DLL');   if DLL > 0 then    begin     @LlamarDLL := GetProcAddress(DLL, 'SeleccionarValores');    if not(@LlamarDLL = nil) then         begin                 LlamarDLL(buffer);         // Los valores que se mostraban en el LISTBOX de la DLL los "guardo" en el TCOMBOBOX de la aplicación        ComboBox1.Items.SetText(buffer);        StrDispose(buffer);    end;   FreeLibrary(DLL);   end;end;  ¿Alguien me puede señalar dónde está el error?
Un saludo para todos.

Amilius:
¿Estas seguro que esto va asi con los @?  :blink:

--- Código: Text ---   var   LlamarDLL : TLlamarDLL; ....     @LlamarDLL := GetProcAddress(DLL, 'SeleccionarValores');   if not(@LlamarDLL = nil) then     
Me parece que LlamarDLL debería ser puntero a TLlamarDLL y remover las arrobas.  :P seguramente se necesitan más cambios pero es lo que veo

Eternal Idol:

--- Cita de: "MON___" --- Espero haber acertado con la sección, pues mi consulta tiene que ver tanto con DELPHI como con C++ BUILDER.
--- Fin de la cita ---
Si la DLL cuando es llamada desde C++ funciona bien entonces habria que mover el hilo al foro de Delphi.

MON___:
Gracias Amilius por la respuesta; efectivamente, Amilius, la "@" sobra cuando se realiza la llamada. Pero no en los casos anteriores:
@LlamarDLL = GetProcAddress(DLL, "Nombre_Funcion"), pero no LlamarDLL = GetProcAddress(DLL, "Nombre_Funcion")

Eternal Idol, gracias por la respuesta. Esperaré unos días y lo consultaré en el foro DELPHI. El que  haya incluido mi consulta en esta sección se debe a que ese tipo de función ya la tenía en una librería desarrollada con DELPHI (¡y funcionaba!). Parte de esa DLL la estoy ahora reescribiéndola en C++ Builder y me ha aparecido ese error.

Eternal Idol:

--- Cita de: "MON___" --- Eternal Idol, gracias por la respuesta. Esperaré unos días y lo consultaré en el foro DELPHI. El que  haya incluido mi consulta en esta sección se debe a que ese tipo de función ya la tenía en una librería desarrollada con DELPHI (¡y funcionaba!). Parte de esa DLL la estoy ahora reescribiéndola en C++ Builder y me ha aparecido ese error.
--- Fin de la cita ---
No me entendiste bien. Si cuando llamas a esa funcion desde un programa de C++ funciona bien entonces voy a mover tu hilo al foro correspondiente ya que eso significaria que el problema esta en el codigo de Delphi. Si el problema esta en el codigo de C++ entonces esta ubicado correctamente aca.

De cualquier manera nunca repitas temas en diferentes subofors por favor.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa