AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dll im Programm unterbringen

Ein Thema von HentaiD · begonnen am 10. Nov 2003 · letzter Beitrag vom 10. Nov 2003
Antwort Antwort
Benutzerbild von HentaiD
HentaiD

Registriert seit: 30. Jun 2003
Ort: Wuppertal
30 Beiträge
 
Delphi 7 Enterprise
 
#1

dll im Programm unterbringen

  Alt 10. Nov 2003, 13:50
Hi!
Ich schreibe grade ein programm , das im Hintergrund xms abspielt.
Die unit , die ich dazu brauche , braucht selber noch eine dll.
Ich möchte aber ungerne eine dll im Programmordner haben.
Also dachte ich mir es müsste doch gehen die dll ins Programm zu lagern ,
so dass ich die dll nicht mehr im ordner brauche.
Eben wie ein Image , welches dann im Programm irgendwo gelagert ist.
Hoffe ihr könnt mir helfen

Greetz,D
Signaturen stinken!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 15:06
Hast du schonmal den Autor der DLL gefragt, ob ihm das gefallen würde (nehme mal an das bist du nicht selber)?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 16:01
Du kannst sie in die Ressource packen und beim Programmstart auf die Festplatte "entpacken".
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 16:10
Ich wuerde mal PEBundle empfehlen. Ist ein excellentes Programm. Habe es selber auch gekauft.

Mit entpacken geht es auch im Eigenbau, Stichwort "BINRES" in meinem Hook-Tutorial.

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von HentaiD
HentaiD

Registriert seit: 30. Jun 2003
Ort: Wuppertal
30 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 18:53
ne hab die dll nicht selber geschrieben. Aber :

* Free!
- you may freely use BASS in your freeware games/demos/etc...


Also wies scheint ist PEBundle genau das , was ich gesucht habe
Danke!

Greetz,D
Signaturen stinken!
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#6

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 19:36
Aber, aber... wer wird denn für so ne kleine Aufgabe direkt ein Progrämmsche kaufen?

Also, als erstes erstellst du mit einem Texteditor eine Textdatei, die du z.B. unter dem Namen "bass.rc" abspeicherst und schreibst folgendes hinein:

Code:
BASS_DLL RCDATA BASS.dll
Das ganze wird fix per Kommandozeile kompiliert mit "brcc32 bass.rc", dabei entsteht dann die Datei "bass.RES".

In dein Projekt baust Du nun folgende Routinen ein (extra Unit, oder egal wo):

Delphi-Quellcode:
function GetTempFileNameEx(Prefix: String = '~zz'): String;
var Buffer: PChar;
begin
  Buffer := '';
  Result := PChar(0);
  try
    GetMem(Buffer, MAX_PATH);
    if GetTempPath(MAX_PATH, Buffer) <> 0 then
     if GetTempFileName(Buffer, PChar(Prefix), 0, Buffer) <> 0 then
       Result := String(Buffer);
  finally
    Dispose(Buffer);
  end;
end;

function ExtractResource(Instance: THandle; Filename, ResName: PChar; ResType: PChar): Cardinal;
var HGlobal, FHandle: THandle;
    HResInfo: HRSRC;
    Ptr : Pointer;
begin
  Result := 0;
  HResInfo := FindResource(Instance, ResName, PChar(ResType));
  if HResInfo = 0 then Exit;
  HGlobal := LoadResource(Instance, HResInfo);
  if HGlobal = 0 then Exit;
  Ptr := LockResource(HGlobal);
  if Ptr <> nil then
  begin
    FHandle := CreateFile(Filename, GENERIC_READ or GENERIC_WRITE, 0,
                          nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if FHandle <> INVALID_HANDLE_VALUE then
    begin
      Result := SizeOfResource(Instance, HResInfo);
      Windows.WriteFile(FHandle, Ptr^, Result, LongWord(Result), nil);
      CloseHandle(FHandle);
    end;
    UnlockResource(HGlobal);
    FreeResource(HGlobal);
  end;
end;
Und dann baust du vor der Stelle an der die DLL geladen wird (ich gehe davon aus, das du die dynamic_bass.pas nutzt) folgendes ein:

Delphi-Quellcode:
var BASS_File: PChar; // Globale Var oder so... wird zum löschen der Datei nachher gebraucht!

  ...
  BASS_File := PChar(GetTempFileNameEx);
  if BASS_File <> PChar(0) then
  begin
    if ExtractResource(HInstance, BASS_File, 'BASS_DLL', RT_RCDATA) > 0 then
    begin
      Load_BASSDLL(ExtractFilePath(BASS_File), ExtractFileName(BassFile));
      // Nun sollte man auch testen, ob es geklappt hat...
    end;
  end;
Und dann muss die Dll (das Tempfile) natürlich noch gelöscht werden, bevor das Programm beendet wird, NACHDEM die Dll gefreet wurde.

Delphi-Quellcode:
//... in FormClose oder so...
Unload_BASSDLL;
Windows.DeleteFile(BASS_File);
...
Die ersten Routinen sind Copy&Paste, den Rest habe ich hier blind getippt, sind also Fehler möglich

Und nicht vergessen, irgendwo die Resource via $R einzubinden!

{$R bass.RES}
Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 19:40
ROFL ... siehe BINRES. Hatte ich schon vorgeschlagen. Allerdings wollte er das nicht extrahieren. Irgendwie kommt mir der Source auch bekannt vor ...
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#8

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 19:47
Ich hatte erst überlegt das reinzuschreiben, weil ich wusste, das das kommt...

Deine und meine Routine sind sich in der Tat ziemlich ähnlich (wobei ich Deine auf die schnelle jetzt leider nicht gefunden habe), aber meine habe ich in der Tat selber geschrieben, ob du es glaubst oder nicht.

Gruß

Wormid


Edit: War denn "putbinresto" nicht mal in der CodeLibrary enthalten? Ich finde das da nicht mehr... Nur noch in diversen Beiträgen als Codeschnipsel...
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#9

Re: dll im Programm unterbringen

  Alt 10. Nov 2003, 20:10
*g* Wormid, das war doch nur als Scherz gemeint. Und selbst wenn ... bei einem popeligen 20Zeiler wuerde ich selbst wenn er sonstwie copyrighted waere nix sagen
BTW: Nico hat sich mal meinen Code angeschaut und in der Tat hatte er recht damit, dass man zB FreeResource weglassen kann, Zitat:
Code:
The FreeResource function is obsolete and is only supported for backward compatibility with 16-bit Microsoft® Windows®. It has been replaced by the following functions ...
Boah, ob das nu in der Codelib ist ist doch auch egal, oder ... schmeiss doch einfach deins nochmal rein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz