>> 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;
 
 
  
            
             |