![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
como pasar una conexion a un dll ?
Hola amigos
tengo un problema con interbase para pasar una conexcion a una dll he revisado el hilo 19993 del amigo absolant y he segido el comentario de cloayza pero no me funciona. el problema esta en la hora de asignar el Handle Ejemplo en el procedure defino el dbHandle de esta forma procedure llamadll(dbHandle : TISC_DB_HANDLE) IbDataBase.Handle := dbHandle [Error] fcatalogoLineas.pas(57): Cannot assign to a read-only property |
|
#2
|
||||
|
||||
|
¿Qué tipo de conexión estas usando? ¿IB?... recuerdo haber hecho esto en BDE y funcionaba sin problemas
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#3
|
|||
|
|||
|
si estoy utilizando IB en delphi 5.
|
|
#4
|
||||
|
||||
|
Hola,
échale un vistazo al método SetHandle de TIBDatabase. Quizá pueda ayudar. Saludos. |
|
#5
|
|||
|
|||
|
Acabo de hacerle una demo a un compañero del Club. ´La demo se la he hecho con paso de usuario/contraseña o pasando los componentes de conexión. He aquí el código
Exe llamador (contiene 2 botones para las dos llamadas a las 2 funciones de la dll) Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, IBCustomDataSet, IBTable, IBDatabase;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
user, pass, BD : string;
public
{ Public declarations }
end;
const
DLL_PRUEBA = 'Project2.dll';
var
Form1: TForm1;
PasandoComponentes : function( hWnd: THandle;
IBDatabase1: TIBDatabase; IBTransaction1: TIBTransaction ) :
integer; stdcall;
PasandoUserPass : function( hWnd: THandle; User, Pass, BD: string ) :
integer; stdcall;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Handle: THandle;
begin
Handle := LoadLibrary(DLL_PRUEBA);
if Handle <> 0 then
begin
@PasandoComponentes := GetProcAddress(Handle, 'PasandoComponentes');
try
if @PasandoComponentes <> nil then
begin
PasandoComponentes( Self.Handle, IBDatabase1, IBTransaction1 );
end;
finally
FreeLibrary(Handle);
end;
end; // Fin del IF del Han
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Handle: THandle;
begin
Handle := LoadLibrary(DLL_PRUEBA);
if Handle <> 0 then
begin
@PasandoUserPass := GetProcAddress(Handle, 'PasandoUserPass');
try
if @PasandoUserPass <> nil then
begin
BD := IBDatabase1.DatabaseName;
user := 'SYSDBA';
pass := 'masterkey';
PasandoUserPass( Self.Handle, User, Pass, BD );
end;
finally
FreeLibrary(Handle);
end;
end; // Fin del IF del Han
end;
end.
Código:
library Project2;
uses
SysUtils,
Classes,
Forms,
Dialogs,
IBDatabase,
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.res}
function PasandoUserPass( hWnd : THandle; User, Pass,
BD : string ) : integer; stdcall; export;
var
iValRet: Integer;
begin
Application.Handle := hWnd;
try
Form2 := TForm2.Create(Application);
try
Form2.user := User;
Form2.pass := Pass;
Form2.bd := BD;
iValRet := Form2.ShowModal;
finally
FreeAndNil(Form2);
end;
except
on E: Exception do
begin
ShowMessage('Error Creant Formulari. ' + E.Message);
raise;
end;
end;
Result := iValRet;
end;
function PasandoComponentes( hWnd: THandle;
IBDatabase1: TIBDatabase; IBTransaction1: TIBTransaction ) : integer;
stdcall; export;
var
iValRet: Integer;
begin
Application.Handle := hWnd;
try
Form3 := TForm3.Create(Application);
try
Form3.IBDatabase1 := IBDatabase1;
Form3.IBTransaction1 := IBTransaction1;
iValRet := Form3.ShowModal;
finally
FreeAndNil(Form3);
end;
except
on E: Exception do
begin
ShowMessage('Error Creant Formulari. ' + E.Message);
raise;
end;
end;
Result := iValRet;
end;
exports
PasandoUserPass,
PasandoComponentes;
begin
end.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|