Ir al contenido


Foto

load dll delphi 2010 con lazarus win32


  • Por favor identifícate para responder
7 respuestas en este tema

#1 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 18 octubre 2011 - 12:43

una gran problema.

ando queriendo usar una dll que hize en delphi 2010 con lazarus win32

el detalles asi.

tengo una unidad donde se declara la funcion.

llamada uInterface

y tiene esto
[pascal]
unit uInterface;

interface

function TimbrarTF(sXML:Ansistring; sRFCEmisor:Ansistring; sRFCReceptor:Ansistring; sCertPEMTF:AnsiString;
                  sURLTF:AnsiString; sCerSat:AnsiString; sKeySat:AnsiString;
                  sclaveSat:AnsiString):Integer; stdcall;


implementation

function TimbrarTF; external 'timbracfdi.dll'  Name 'TimbrarTF'; stdcall;

end.

[/pascal]
y donde quiero usar la dll.
solo la incluyo

uInterface.pas en mi exe

y la llamo asi
[pascal]
procedure TForm1.BtnTimbrarClick(Sender: TObject);
begin

    ShowMessage(      IntToStr(
    TimbrarTF(EditXMLaTimbrar.Text, EditRFCEmisor.Text, EditRFCReceptor.Text, EditCertPEMTF.Text,
              EditURLTF.Text,EditCertSat.Text, EditCertKet.Text,
              EditContraSAT.Text )
      ) ) ;



end;
[/pascal]

lazarus me da error

y solo asi la pude hacer compilar

sin usar el archivo uInterfaz.pas

solo la funcion directo en el
programa

[pascal]
unit unit1laz;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    BtnTimbrar: TButton;
    EditCertKet: TEdit;
    EditCertPEMTF: TEdit;
    EditCertSat: TEdit;
    EditContraSAT: TEdit;
    EditRFCEmisor: TEdit;
    EditRFCReceptor: TEdit;
    EditURLTF: TEdit;
    EditXMLaTimbrar: TEdit;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    procedure BtnTimbrarClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }


  end;

var
  Form1: TForm1;

implementation

function TimbrarTF(sXML:Ansistring; sRFCEmisor:Ansistring; sRFCReceptor:Ansistring; sCertPEMTF:AnsiString;
                  sURLTF:AnsiString; sCerSat:AnsiString; sKeySat:AnsiString;
                  sclaveSat:AnsiString):Integer; external 'timbracfdi.dll';

{ TForm1 }

procedure TForm1.BtnTimbrarClick(Sender: TObject);
begin
      ShowMessage(      IntToStr(
    TimbrarTF(EditXMLaTimbrar.Text, EditRFCEmisor.Text, EditRFCReceptor.Text, EditCertPEMTF.Text,
              EditURLTF.Text,EditCertSat.Text, EditCertKet.Text,
              EditContraSAT.Text )
      ) ) ;

end;

initialization
  {$I unit1laz.lrs}

end.     
[/pascal]

¿compila pero da error. ¡?

¿que onda. como llamo una dll en lazarus.

grcias.?

  • 0

#2 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 18 octubre 2011 - 04:33

Este hilo te puede ayudar.
http://www.lazarus.f...p?topic=7747.15
  • 0

#3 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 19 octubre 2011 - 04:29

no le entiendo.

:s

:cry:

  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 19 octubre 2011 - 05:38




delphi
  1. function TimbrarTF(sXML:Ansistring; sRFCEmisor:Ansistring; sRFCReceptor:Ansistring; sCertPEMTF:AnsiString;
  2.                   sURLTF:AnsiString; sCerSat:AnsiString; sKeySat:AnsiString;
  3.                   sclaveSat:AnsiString):Integer; stdcall;




¿Definiste la función como stdcall? ¿Seguro?.

En ese caso prueba:


delphi
  1. function TimbrarTF(sXML:Ansistring; sRFCEmisor:Ansistring; sRFCReceptor:Ansistring; sCertPEMTF:AnsiString;
  2.                     sURLTF:AnsiString; sCerSat:AnsiString; sKeySat:AnsiString;
  3.                     sclaveSat:AnsiString):Integer; stdcall; external 'timbracfdi.dll'



Saludos.
  • 0

#5 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 19 octubre 2011 - 08:57

escafandra

lo pruebo en unos dias por que mande al diablo mi windows seven  :@ :@ (li) (li) . ya anda dando errores
y lo voy a reintalar lo pruebo y espero que con tu aportacion funcione. gracias :wink:
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 20 octubre 2011 - 12:08

...lo voy a reintalar lo pruebo y espero que con tu aportacion funcione. gracias 


Bien, pero recuerda la pregunta que te hice:

¿Definiste la función como stdcall? ¿Seguro?.


Revisa este tema para mas aclaraciones.


Saludos.
  • 0

#7 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 21 octubre 2011 - 12:16

Dos cosas para recordar al usar dll:

1.- Utiliza el mismo calling convention en la dll y en el programa que la utiliza
2.- No utilices tipos de datos cuya memoria gestione el heap manager, ya que tanto la dll como el programa tienen su propio heap manager y vas a tener problemas. En vez de AnsiString, utiliza pchar u otro.

Saludos.

  • 0

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

Escrito 21 octubre 2011 - 08:38

Una vez tuve una inquietud parecida a la tuya y este es el tema en sí
http://www.delphiacc...-al-cargar-dll/

puede que te sirva......... :wink:
  • 0




IP.Board spam blocked by CleanTalk.