Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   problemas con dll y modulo de datos (https://www.clubdelphi.com/foros/showthread.php?t=90924)

cl2raul 09-10-2016 01:05:07

problemas con dll y modulo de datos
 
1 Archivos Adjunto(s)
hola a todos:
estoy haciendo una dll, la cual contendra funciones y procedimientos para operar con una base de datos SQLite usando FireDAC en un DataModule...
ya he echo dll que contienen formularios, pero no se si el error esta en que el procedimiento q exporto en la dll no tiene acceso al DataModule, les adjunto el mensaje de error...

bueno aqui usaremos este pequeño codigo para que todos estemos sincrinizados y afrentemos el problemas sin tirar piedras a ver si damos a la lata... esta es la dll y como pueden observar esta la unidad uData que es un DataModule.

Código Delphi [-]
library dataLib;

uses
  System.SysUtils, System.StrUtils,
  System.Classes,
  FMX.Graphics,
  uData in 'uData.pas' {DM: TDataModule};

{$R *.res}

procedure conectarDB; stdcall;
begin
  DM.Dconnection.Params.Clear;
  DM.Dconnection.Params.Add('Database='+GetCurrentDir+'\cmodelo.db');
  DM.Dconnection.Params.Add('DriverID=SQLite');
  DM.Dconnection.Connected:=True;
end;

exports
  conectarDB;

begin
  //nada
end.

en el DataModule agregamos los siguentes componentes:

Dconnection: TFDConnection; FDPhysSQLiteDriverLink1:
TFDPhysSQLiteDriverLink;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;

observaran q cuando compilen todo marchara bien, entoces para probar cerramos y hacemos un proyecto nuevo, en mi caso Multi-Device Aplication (FireMonkey HD) y agregamos un botoncito nos queda esto:

Código Delphi [-]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms;

type
  TForm1 = class(TForm)
   procedure Button1Click(Sender: TObject);  
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  procedure conectarDB; stdcall; external 'dataLib.dll' name 'conectarDB';

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
 conectarDB;   
end;

end.

ya tenemos el ejecutable, cerramos y cargamos el proyecto DLL y en el menu Run escojemos Parameters... y buscamos el ejecutable. con esto ya podemos correr la dll y me pueden ayudar, jajaja...
gracias de antemano.

Ñuño Martínez 12-10-2016 18:41:36

Es evidente que hay algo a lo que no puede acceder. La única forma de hacerlo es depurando. Quizá un "paso a paso" pueda ayudarte.

cloayza 12-10-2016 20:57:29

Creo que el problema está acá:

Código Delphi [-]
procedure conectarDB; stdcall;
begin
  //Estas accediendo a DM y asignando parámetros y el objeto no ha sido creado aun...
  DM:=TDM.create(application);
  try
  DM.Dconnection.Params.Clear;
  DM.Dconnection.Params.Add('Database='+GetCurrentDir+'\cmodelo.db');
  DM.Dconnection.Params.Add('DriverID=SQLite');
  DM.Dconnection.Connected:=True;
  finally
  DM.free;
  end;
end;

cl2raul 15-10-2016 00:48:54

si cloayza, pense q el probema benia por ahiii pero como se cuando ya se creo el datamodule para ejecutarlo....


La franja horaria es GMT +2. Ahora son las 07:19:08.

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