Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con dll externa (https://www.clubdelphi.com/foros/showthread.php?t=85552)

rgarcia_ayala 31-03-2014 01:50:13

Ayuda con dll externa
 
1 Archivos Adjunto(s)
Estimados,

Les solicito una ayuda con este tema pues es mi primer contacto con DLLs.
Necesito ejecutar un metodo de una clase que esta incluida en una dll construida en VB. La clase se llama '_clsSobre' y su metodo es 'Prueba'.

Les pego el codigo que estoy intentando usar:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows,  eFacturaDLL_TLB, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)

    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MiclsSobre : _clsSobre;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var  MiclsSobre : _clsSobre;
begin
        MiclsSobre.Prueba;
end;

end.
Cuando ejecuto mi aplicacion me tira el siguiente error:

'project Efactura.exe raised exception class EAccessViolation with ......'

Me pueden ayudar o decir por donde empezar ?

ecfisa 31-03-2014 03:13:37

Hola rgarcia_ayala, bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Cuando pongas código en tus mensajes usa TAG's para darle mas claridad como lo explica la siguiente imágen:


Saludos :)

Neftali [Germán.Estévez] 31-03-2014 10:00:40

¿Nos podrías subir la DLL de ejemplo?
¿Es una DLL? ¿Un servidor COM?

En el código que has puesto no hay referencia a la DLL; Debería fallarte al compilar ¿no?

rgarcia_ayala 31-03-2014 15:24:24

1 Archivos Adjunto(s)
Muchas gracias por responder.

Ok Neftali, te subo la dll en cuestion.

Pero te cuento que finalmente y por ensayo y error pude hacerla funcionar..... Pero sigo sin entender mucho sobre el tema.
Te paso el código que está funcionando:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows,  eFacturaDLL_TLB, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);


  private

      { Private declarations }
  public
    { Public declarations }
  end;

  MiclsSobre = class(CoclsSobre);  // clase definida en unit eFacturaDLL_TLB y que se encarga de la creacion de la clase _clsSobre, y en             
                                              // definitiva la que tiene definido el método 'Prueba'.

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
        MiclsSobre.Create.Prueba;    // tira el clásico 'Hola mundo' 
end;

end.

Neftali [Germán.Estévez] 31-03-2014 16:15:20

Lo primero es que es un servidor COM, por lo tanto hay que registrarla con regsvr32.

Neftali [Germán.Estévez] 31-03-2014 16:45:59

(1) Registrar la DLL con regsvr32
(2) Importarla desde Delphi (Import Type Librery) que genera el fichero TLB
(3) Un código similar a este debería bastar para acceder...

Código Delphi [-]
uses
  eFacturaDLL_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: clsCFE;
  j:integer;
begin
  i := CoclsCFE.CReate;
  j := i.Prueba;
  ...
end;

rgarcia_ayala 01-04-2014 02:54:10

Muchas gracias por tus aportes Neftali, han sido de mucha ayuda.
Considero que el tema ha sido resuelto, pero antes me gustaria que me sugirieras algunos hilos para poder entender mejor lo que es servidor COM y lo que es DLL.

Saludos y muchas gracias nuevamente.^\||/

Neftali [Germán.Estévez] 01-04-2014 14:05:10

Todo son DLL's, no son cosas diferentes.
Si revisas documentación de MIicrosoft encontrarás toda la que necesites.
Una simple búsqueda en Google te dará infinitos resultados.

Empieza por la wiki.

rgarcia_ayala 19-03-2015 17:33:38

Error compilar fichero TLB de DLL externa (VB)
 
1 Archivos Adjunto(s)
Estimado Neftali,

Utilizaba una dll externa desarrollada en VB a la cual le han introducido modificaciones y la cual al registrar e instalar no me generó ningún tipo de error.
El problema surge cuando compilo mi aplicación:

[Error] eFacturaCOM_TLB.pas(248): Property setters cannot take var parameters.

Código Delphi [-]
uses
  Windows,  Messages, DateUtils, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, eFacturaCOM_tlb, OleServer;

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
        cfe : clsCFE;
        jj : integer;
        el_xml : widestring;
begin

   cfe := coclscfe.create;

    // cabezal
  cfe.AnoEmision := ANOEMISION.Text;
  cfe.MesEmision := MESEMISION.Text;
  cfe.DiaEmision := DIAEMISION.Text;
  cfe.AnoVto     := ANOVTO.Text;
  cfe.MesVto     := MESVTO.Text;
  cfe.DiaVto     := DIAVTO.Text;
  cfe.TipoCFE    := strtoint( TIPOCFE_CODIGO.Text );
  cfe.IndicadorMBruto := strtoint( IndicadorMbruto_cod.Text );
  cfe.FormaPago := strtoint( FormaPago_cod.Text );

  ...

Adjunto captura del error al compilar y la nueva dll.


La franja horaria es GMT +2. Ahora son las 10:32:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi