Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi minifmod.dll in resource? (https://www.delphipraxis.net/31903-minifmod-dll-resource.html)

quakergod 15. Okt 2004 13:33


minifmod.dll in resource?
 
hi, ich würde gern in meinem programm musik einbauen und benutze dafür MiniFmod,
funktioniert auch alles, aber ich muss zur .exe immer auch die minifmod.dll im gleichen ordner mitliefern,

ich würde die minifmod.dll gerne in eine resource stecken, damit ich nur die .exe hab!

hier der code der FMOD.pas:

Delphi-Quellcode:
unit FMOD;

interface

function SongLoadFromFile(FileName: PChar): Integer; cdecl; external 'minifmod.dll';
function SongLoadFromResource(FileName: PChar): Integer; cdecl; external 'minifmod.dll';
procedure SongPlay(hMod: Integer); cdecl; external 'minifmod.dll';
procedure SongStop(hMod: Integer); cdecl; external 'minifmod.dll';
procedure SongFree(hMod: Integer); cdecl; external 'minifmod.dll';
function SongGetOrder(hMod: Integer): Integer; cdecl; external 'minifmod.dll';
function SongGetRow(hMod: Integer): Integer; cdecl; external 'minifmod.dll';
function SongGetTime(hMod: Integer): Integer; cdecl; external 'minifmod.dll';

implementation

end.
könnt ihr mir helfen? :angel2:

Dax 15. Okt 2004 13:36

Re: minifmod.dll in resource?
 
Erstelle dir doch eine Resource mit der DLL, linke sie in die .exe und extrahieren die DLL später wieder. Wenn ich mich nicht irre, gibt es im Forum sogar ein kleines Tuturial.

Luckie 15. Okt 2004 13:38

Re: minifmod.dll in resource?
 
Mit der Suche [dp]dll resource7dll] findet man zum beispiel sowas: http://www.delphipraxis.net/internal...t=dll+resource

quakergod 22. Okt 2004 01:40

Re: minifmod.dll in resource?
 
ich kriegs absolut net hin :(

hab jetzt ne neue unit "ResLoad" angelegt, in der "FMOD.pas" verlinkt und das drin gespeichert:

Delphi-Quellcode:
unit ResLoad;

interface

implementation

function putbinresto(binresname: string; path: string): boolean;
var
  ResSize, HG, HI, SizeWritten, hFileWrite: Cardinal;
begin
  result := false;
  //find resource
  HI := FindResource(hInstance, @binresname[1], 'BINRES');
  //if legal handle, go on
  if HI <> 0 then
  begin
    //load resource and check the handle
    HG := LoadResource(hInstance, HI);
    if HG <> 0 then
    begin
      //check resource size (needed to copy a block of data)
      ResSize := SizeOfResource(hInstance, HI);
      //create the file
      hFileWrite := CreateFile(@path[1], GENERIC_READ or GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS,
        FILE_ATTRIBUTE_ARCHIVE, 0);
      //if succeeded ...
      if hFileWrite <> INVALID_HANDLE_VALUE then
      try
        //write to it
        result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize,
          SizeWritten, nil) and (SizeWritten = ResSize));
      finally
        //close file
        CloseHandle(hFileWrite);
      end;
    end;
  end;
end;

end.


bekomme aber ganz viele fehlermeldungen:

Code:
[Fehler] ResLoad.pas(13): Undefinierter Bezeichner: 'FindResource'
[Fehler] ResLoad.pas(18): Undefinierter Bezeichner: 'LoadResource'
[Fehler] ResLoad.pas(22): Undefinierter Bezeichner: 'SizeOfResource'
[Fehler] ResLoad.pas(24): Undefinierter Bezeichner: 'CreateFile'
[Fehler] ResLoad.pas(24): Undefinierter Bezeichner: 'GENERIC_READ'
[Fehler] ResLoad.pas(24): Undefinierter Bezeichner: 'GENERIC_WRITE'
[Warnung] ResLoad.pas(24): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert
[Fehler] ResLoad.pas(25): Undefinierter Bezeichner: 'FILE_SHARE_READ'
[Fehler] ResLoad.pas(25): Undefinierter Bezeichner: 'FILE_SHARE_WRITE'
[Warnung] ResLoad.pas(25): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert
[Fehler] ResLoad.pas(26): Undefinierter Bezeichner: 'FILE_ATTRIBUTE_ARCHIVE'
[Fehler] ResLoad.pas(28): Undefinierter Bezeichner: 'INVALID_HANDLE_VALUE'
[Warnung] ResLoad.pas(28): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
[Fehler] ResLoad.pas(31): Undefinierter Bezeichner: 'WriteFile'
[Fehler] ResLoad.pas(31): Undefinierter Bezeichner: 'LockResource'
[Fehler] ResLoad.pas(31): Zeigertyp erwartet
[Fehler] ResLoad.pas(32): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] ResLoad.pas(35): Undefinierter Bezeichner: 'CloseHandle'
[Fataler Fehler] FMOD.pas(11): Verwendete Unit 'ResLoad.pas' kann nicht compiliert werden

ich komm da echt nicht weiter, könnt ihr mir helfen?

dizzy 22. Okt 2004 01:43

Re: minifmod.dll in resource?
 
Schau dir doch am besten mal an in welchen Units die ganzen "undefinierten Bezeichner" deklariert sind, und mach mal ne uses-Liste auf ;)

jim_raynor 22. Okt 2004 05:18

Re: minifmod.dll in resource?
 
Du musst die Windows-Unit einbinden. Allerdings hast du ein generelles Problem. In der Unit FMOD werden die Funktionen Statisch gebunden. Das bedeutet, dass zum Programmstart die benötigte DLL vorhanden sein muss. Ist sie es nicht, wird schon der Start abgebrochen und die DLL wird garnicht aus der Ressource gepackt. Du musst also 1. entweder ein kleines Installprogramm schreiben, was die DLL doch entpackt, oder 2. die FMOD so umschreiben, dass die Funktionen dynamisch eingebunden wird.

Stichworte wären hier Hier im Forum suchenLoadLibrary Hier im Forum suchenGetProcAddress.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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