/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Dll lock!??
Fra : TRN


Dato : 17-02-07 20:23

Jeg har ett library prosjekt (dll) som "erstatter" en orginal dll, dvs alle
funksjoner denne dll hadde har jeg erstattet med mine egne.
Nå har jeg testet ut programmet med 2 forskjellige programmer som bruker
denne dll'en og alt funker helt fint.
Så testet jeg ett tredje program, og da blir formen som min dll har laget
'låst' (musepilen viser timeglass), og er bare halvferdig tegnet.
Denne formen blir skapt i library's initialization seksjon.

Lurer da på om dll kan bli låst av programmet som bruker den? ..Har dette da
evt noe med safe threads å gjøre?
Jeg har svært liten (ingen) peil på dll i window, og kan trenge litt hjelp
her.

- TRN



 
 
Uffe Kousgaard (18-02-2007)
Kommentar
Fra : Uffe Kousgaard


Dato : 18-02-07 14:26

"TRN" <trn@not.me> wrote in message news:45d755ff$1@news.broadpark.no...
> Jeg har ett library prosjekt (dll) som "erstatter" en orginal dll, dvs
> alle funksjoner denne dll hadde har jeg erstattet med mine egne.

Hvordan ved du præcis hvad den originale dll gør?



TRN (18-02-2007)
Kommentar
Fra : TRN


Dato : 18-02-07 16:01


>> Jeg har ett library prosjekt (dll) som "erstatter" en orginal dll, dvs
>> alle funksjoner denne dll hadde har jeg erstattet med mine egne.
>
> Hvordan ved du præcis hvad den originale dll gør?

Ja det gjør jeg, og den blir brukt kun av 1 program om gangen, og dll'en
blir lagt sammen med .exe filen (ikke i system32)..
Det er en enkel dll som skriver noen data, og jeg har full oversikt over
alle procedurer og funksjoner (har fått docs av den orginale utvikleren).

3 av 5 programmer funker helt fint med min dll nå, men jeg har fortsatt
problemer med 2 stk.
Den ene krasher nå dll blir loaded(startup), og den andre crasher på close.
".exe raised too many consecutive exceptions: 'access violation at
0x00000000 read of address 0x00000000'. Process Stopped"
Så selve formen, og hele programmet med min dll funker, helt til jeg lukker
selve .exe (untatt den som crasher på startup da).
Jeg har lest og søkt masse på nettet, men kan ikke helt se hva jeg gjør
feil!?

Jeg bruker ingen stringer, så sharemem er ikke nødvendig.
Kanskje mere mere info, så her er en forkortet version av mine units og
selve library:

*****************************************************************************
Selve prosjektet library:
*****************************************************************************
library hardsid;

uses
SysUtils,
Classes,
Windows,
uForm in 'uForm.pas' {Form1},
uSidRip in 'uSidRip.pas';

{$R *.res}

....... og alle procedurer og functions...bruker stdcall
....

{==================================================================}
{ DllMain procedure
{==================================================================}
procedure DllMain(reason: integer);
begin
case reason of
DLL_PROCESS_ATTACH:
begin
ShowForm;
MakeSID;
end;

DLL_THREAD_ATTACH:
begin
end;

DLL_PROCESS_DETACH:
begin
KillSID;
KillForm;
end;

DLL_THREAD_DETACH:
begin
end;

end;
end;


{==================================================================}
{ Exports functions.....
{==================================================================}
exports
GetHardSIDCount,
InitHardSID_Mapper,
GetDLLVersion,
.... + flere
....
{==================================================================}
{ DLL initialize.....
{==================================================================}
begin
DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
end.



*****************************************************************************
uForm unit kommer her:
*****************************************************************************
unit uForm;

interface

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


type
TForm1 = class(TForm)
SaveDialog: TSaveDialog;
btnSave: TButton;
.... + mere
....
end;

var
Form: TForm1;

procedure ShowForm;
procedure KillForm;

implementation
uses
uSidRip;

{$R *.dfm}

procedure ShowForm;
begin
Form:= TForm1.Create(nil);
Form.Show;
end;

procedure KillForm;
begin
if Assigned(Form) then begin
Form.SysTimer.Enabled:= false;
FreeAndNil(Form);
end;
end;

*****************************************************************************
uSidRip her:
*****************************************************************************
unit uSidRip;

interface
uses
Windows, Classes, SysUtils;

type
TSidFake = Class(TObject)
private
...
public
constructor Create;
destructor Destroy; override;
...
...
end;

var
SID: TSidFake;

procedure MakeSID;
procedure KillSID;

implementation
uses
uForm;

procedure MakeSID;
begin
SID:= TSidFake.Create;
end;

procedure KillSID;
begin
if Assigned(SID) then begin
FreeAndNil(SID);
end;
end;

destructor TSidFake.Destroy;
begin
...
...
inherieted;
end;



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste