[erledigt] bass.dll tieferes Verständnis beim Laden fehlt

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

[erledigt] bass.dll tieferes Verständnis beim Laden fehlt

Beitrag von charlytango »

Hab mich nun einige Zeit mit der bass.dll beschäftigt um ihr Musik zu entlocken.
hab dabei diverse Quellen und auch die Delphi-Demos verwendet die der bass.zip (version 2.4) beiliegen.
Habe auch versucht diesen Player zu portieren
http://www.gausi.de/memp.html
was letztlich erfolgreich war.

Wo es mir aber massiv an Verständnis fehlt ist der Zeitpunkt des Ladens der bass.dll, bzw wird das bei vielen Beispielen gar nicht erst extra gemacht, und über solche Funktionen (wie auch von Winni vorgeschlagen viewtopic.php?f=25&t=13024&p=115438&hil ... ll#p115438) gelöst:

Code: Alles auswählen

procedure TMeMPPlayer.InitBassEngine(HND: HWND);
begin
  if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
    MessageDLG('Bass '+BASSVERSIONTEXT+' nicht gefunden', mtError, [MBOK], 0);

  {$IFDEF LINUX}
  BASS_Init(-1, 44100, 0, @H, nil);
  {$ELSE}
  BASS_Init(-1, 44100, 0, HND, nil); /// !!! Bei Windows ohne Pointer, nur Handle
  {$ENDIF}

end; 
andere beschäftigen sich intensiv damit (Dynamic_bass.pas)

Code: Alles auswählen

function Load_BASSDLL(const dllfilename : String) :boolean;
{$IFDEF MSWINDOWS}
	var  oldmode : integer;
{$ENDIF}
begin
 if BASS_Handle <> 0 then
  Result:= true
 else
  begin
   {$IFDEF MSWINDOWS}
     oldmode := SetErrorMode($8001);
   {$ENDIF}

   {$IFDEF UNICODE}
     BASS_Handle:= LoadLibraryW(PWideChar(dllfilename));
   {$ELSE}
     BASS_Handle:= LoadLibrary(PChar(dllfilename));
   {$ENDIF}

   {$IFDEF MSWINDOWS}
    SetErrorMode(oldmode);
   {$ENDIF}

   // dazwischen einiges an Prüfprozeduren   
   
    Result:= (BASS_Handle <> 0);
  end;
end;
Die erste Methode (also nur Bass_init) funktioniert bei mir (Win 10, 32bit exe) nur wenn die bass.dll im gleichen Verzeichnis wie die exe liegt.
Die andere Mezhode hab ich noch nicht wirklich zum Laufen gebracht.

Ich würde gerne die bass.dll in ein eigene Verzeichnis pachen samt allen anderen für bass nötigen dlls.

Wie gehe ich da intelligent vor ?
Zuletzt geändert von charlytango am Mo 8. Mär 2021, 19:00, insgesamt 1-mal geändert.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: bass.dll tieferes Verständnis beim Laden fehlt

Beitrag von Winni »

Hi!

Warum machst Du Dir unnötigt Probleme, anstatt Dein Projekt weiter zu entwickeln.

* Linux: Pack die ganzen .so Files in eines der dezidierten library verzeichnisse /usr/local/lib/ oder /usr/lib . Danach ldconfig als root ausführen

* Windows: pack die DLLs ins Verzeichnis Deines Projects.

Alles andere geht irgenwie, ist aber Zeitverschwendung.

Winni

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: bass.dll tieferes Verständnis beim Laden fehlt

Beitrag von charlytango »

also der pragmatische Ansatz -- auch ok.

Antworten