Programación General > C++ Builder
Error "einvalidpointer"
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
[#] Página Siguiente
Ir a la versión completa