Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de una DLL (https://www.clubdelphi.com/foros/showthread.php?t=33193)

guiweb 29-06-2006 15:48:53

Manejo de una DLL
 
Hola a todos, tengo el siguiente problema, supongo que mi pregunta les sonará comun, pero no lo es:

Ambiente de desarrollo: Delphi 5 corriendo sobre WinXP sp2.

estoy desarrollando un plugin, que debe comunicarse con una impresora fiscal, para esto el fabricante de la impresora me ha facilitado 2 DLL
una llamada FISCAL232.DLL que es la que se encarga de la comunicacion con la impresora y otra llamada RH4610Kc4.DLL que es la que interactua con mi sistema. hasta aca vamos bien, ahora paso a detallar cuales han sido mis pasos espero que me digan si me he equivocado o no..

para utilizar la DLL RH4610Kc4 hago los siguientes pasos.

Menu: proyecto->importar Libreria; aca busco la DLL RH4610Kc4 y la cargo al sistema, esto modifica algunos parametros de mi programa pero hasta ahi todo bien, dentro del USES me crea una llamada a RH4610Kc4_TLB, les coloco el codigo de lo que me va quedando:
Código Delphi [-]
uses
 Windows, RH4610Kc4_TLB, forms,inifiles, Dialogs,Controls,Classes, Graphics ,SysUtils, messages, MSXML_TLB, ShellAPI;

luego YO hago esto:

Código Delphi [-]
type
  TInvcUpdate = class(TOnUpdate)
  private
  ClassPrincipal1: TClassPrincipal; // instancio la clase que viene con la DLL
    fInvoice, fForm: IRdaDocument;
    fInvoiceItem: IRdaDocument;
  public
    class function Table: integer; override;
    procedure Initialize(RProApp: TRProApp;
                         Doc: IRdaDocument); override;
    function BeforeUpdate: boolean; override;
    procedure AfterUpdate; override;
  end;

y luego simplemente uso las funciones que vienen en la DLL de esta forma:
Código Delphi [-]
ClassPrincipal1.Open_Port(1);

con este comando se supone que mi plugin abre el puerto de la impresora para recibir comandos fiscales... pero la verdad es que recibo un error del tipo 25(0x19)... lei en el manual de errores de la impresora y dice que es un problema con la Memoria Fiscal y que debo reemplazarla, lo cual es MENTIRA, ya que tengo hecho un programa en visual que ocupa exactamente los mismos instrumentos que Delphi, y FUNCIONA a las mil maravillas...

ahora yo les pregunto: Esta bien lo que estoy haciendo??? o tengo que llamar a la DLL de otra manera??

muchas gracias por darse el tiempo de leer y pensar en mi problema, son muy amables

dec 29-06-2006 16:09:17

Hola,

No sé si tendrá algo que ver o no, pero, cuando en el código de más arriba comentas que "instancias la clase que viene con la DLL" en realidad no estás haciéndolo, es decir, esa línea lo que hace es declarar un miembro de "TInvcUpdate" del tipo "TClassPrincipal".

Es decir, que antes de llamar a ningún método de dicho miembro debes previamente crear el objeto. Supongo que lo haces, pero, en vista del comentario en el código que te digo he querido comentar yo esto por si acaso.

Me llama la atención también que dices que tienes un programa escrito en Visual (Basic, supongo) que funciona bien, pero, ¿utiliza la misma librería DLL? Es más, ¿en qué lenguaje está escrita dicha librería DLL? Me llama la atención por el contenido de la DLL, una clase, no una función. ¿O qué me estoy perdiendo? ;)

guiweb 29-06-2006 16:23:25

sorry, tienes razon, el comentario que estoy colocando es un error.... nada que ver y en cuanto a la DLL está desarrollada en Visual Basic (yo no la hice, me la entrego la empresa).

por ahi lei un libro ayer, en que decía que no importaba el lenguaje en el que estaba desarrollada la DLL tendria que funcionar de todas formas.

sigo con la duda de que si la llamada a la DLL es correcta o debería hacerla de otra forma... tambien leí en el libro que se podia llamar a la funcion de la DLL y usarla como external... me conviene esto??

gracias por tu respuesta.. la verdad es que no se mucho delphi na mas las cosas basicas pero esto con el manejo de las DLL me complicó un poco...

Salu2

dec 29-06-2006 19:54:18

Hola,

Pues me parece que no voy a poder ayudarte. Si se tratara de utilizar alguna función de una DLL tal vez podría, pero, según parece tú tratas de utilizar de la DLL una clase escrita en Visual Basic (y extrañamente nombrada como se acostumbra en Delphi, comenzando con una "T" de "Type") y hasta ahí no llego, porque nunca tuve necesidad de algo así.

Quizá algún compañero pueda decir algo al respecto. Suerte en todo caso.

guiweb 30-06-2006 15:10:48

mmm pues, gracias por la ayuda... pero eso es lo que me entrega la DLL, es mas, he logrado hacer lo siguiente: escribo en mi codigo ClassPrincipal1. y espero un segundo, y se me desplega un menu con las funciones de la DLL, y en este caso selecciono Open_Port.

eso te sirve de algo?

Gracias


La franja horaria es GMT +2. Ahora son las 19:36: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