Ya revisé el hilo anterior y de ahi me fui metiendo en los otros hilos y aunque he ganado en conocimiento me quedan algunas dudas.
Por ejemplo hice la siguiente dll:
Código:
library ParadoxUtils;
uses SysUtils, BDE, DBTables, DB;
{$R *.res}
procedure PackTable(aAliasName, aTableName: PChar); export;
var
PxStruct: CRTblDesc;
db:TDataBase;
begin
with TTable.Create(nil) do
try
DatabaseName := aAliasName;
TableName := aTableName;
Exclusive := True;
Open;
Db := Session.FindDatabase(aAliasName);
Db.KeepConnection := True;
Close;
FillChar(PxStruct, SizeOf(PxStruct), 0);
StrPCopy(PxStruct.szTblName, aTableName);
PxStruct.bPack := True;
if DbiDoRestructure(Db.Handle, 1, @PxStruct, nil, nil, nil, False) <> DBIERR_NONE
then raise EDatabaseError.Create('Error en tabla' + aTableName);
Db.Connected := False;
finally
Free;
end;
end;
exports
PackTable;
begin
end.
Este procedimiento lo que hace es hacerle un pack a una tabla paradox (lo tomé prestado de los trucos)
Ahora en mi aplicación hice la siguiente declaración:
Código:
interface
...
procedure PackTable(AliasName, TableName: PChar); far; external 'ParadoxUtils.dll';
...
y más adelante:
Código:
...
PackTable(PChar('GasTel'), PChar('REGISTRO.DB'));
...
Hasta aquí todo me ha funcionado bien pero me ha surgido la duda al revisar los hilos y ver el uso de las funciones LoadLibrary y FreeLibray en unos ejemplos para poner formas dentro de una dll. Estas funciones se usan solo en estos casos o yo en mi aplicación tendría que hacer algo parecido para usar el procedimiento que escribi en la dll.
Es decir cuando mi aplicación se está ejecutando y llego al punto de llamar a PackTable ella carga en memoria la dll, o cuando compilé mi aplicación se le incorporó el código desde la dll?
Es responsabilidad del programador o eso lo hace el SO?
Disculpe si soy extenso pero lei
Cita:
Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|