Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bass.dll: BASS_GetVersion() -> AV an Adresse 0x00000000 (https://www.delphipraxis.net/49535-bass-dll-bass_getversion-av-adresse-0x00000000.html)

Die Muhkuh 12. Jul 2005 16:03


Bass.dll: BASS_GetVersion() -> AV an Adresse 0x00000000
 
Hi,

ich lade die Bass.dll folgendermaßen:

Delphi-Quellcode:
  if Bass_GetVersion() <> DWORD(MAKELONG(2, 1)) then // Da kommt die Exception
  begin
    Error('BASS.DLL 2.1 nicht geladen!' + #10 + 'Ihre BASS.DLL-Version: %s',
      [Bass_GetVersion()], EBassLoadError);
  end;
Diesen IF-Block hab ich in der BassTest abgeschaut, dort wird das genauso gemacht, aber dort funktioniert es. In meinem Code allerdings, erhalte ich folgende Meldung:

Code:
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
Im Projekt E:\Delphi\Meine Programme\Bass-Unit\BassEx.exe sind zu viele aufeinander folgende Exceptions aufgetreten: ''access violation at 0x00000000: read of address 0x00000000''. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK  Hilfe  
---------------------------
Der gesamte Code ist das:

Delphi-Quellcode:
unit uaudioengine;

interface

uses
  Bass, Windows, SysUtils;

type
  EExceptionClass = class of Exception;
  EBassLoadError = Exception;

  TAudioEngine = class
  private
    procedure Error(Msg: String; const Arg: array of const; aException: EExceptionClass);
  public
    constructor Create(WND: HWND);
    destructor Destroy; override;
  end;

implementation

constructor TAudioEngine.Create(WND: HWND);
begin
  if Bass_GetVersion() <> DWORD(MAKELONG(2, 1)) then
  begin
    Error('BASS.DLL 2.1 nicht geladen!' + #10 + 'Ihre BASS.DLL-Version: %s',
      [Bass_GetVersion()], EBassLoadError);
  end;
end;

destructor TAudioEngine.Destroy;
begin
  Bass_Free();
  inherited;
end;

procedure TAudioEngine.Error(Msg: String; const Arg: array of const;
  aException: EExceptionClass);
begin
  raise aException.CreateFmt(Msg, Arg);
end;
Mehr gibt es noch nicht, da ich gerade erst damit angefangen hab.

Ich möchte nun wissen, warum ich diesen Fehler bekomme.

[edit2] Die Bass.dll ist im Verzeichnis dieser Unit ;) [/edit2]

NicoDE 12. Jul 2005 16:07

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Unit (Header) und DLL haben die gleiche Version?

Luckie 12. Jul 2005 16:08

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Muss nicht irgendwo die Ini-Methode in der Bass DLL Delphi Unit aufgerufen werden?
Delphi-Quellcode:
function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND): BOOL; stdcall; external 'bass.dll' name 'BASS_Init';

Die Muhkuh 12. Jul 2005 16:08

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Zitat:

Zitat von NicoDE
Unit (Header) und DLL haben die gleiche Version?

Hi,

ja. Die Bass.Dll-Beispiele lassen sich anstandslos compilieren und funktionieren.

[edit]
@Michael,

doch, aber die Bass_GetVersion()-Methode ruft man vor Bass_Init auf. So ist das in den Beispielen.
[edit]

[edit2]
Ich habs nun auch versucht, erst Bass_Init aufzurufen und dann die Bass_GetVersion()-Methode, aber nun kommt der Fehler bei Bass_Init.
[/edit2]

turboPASCAL 12. Jul 2005 16:37

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
@Spider Starte mal den Rechner neu. (unload event. DLL's)

Habe deinen Code getestet und er ist ok, bis auf:
Delphi-Quellcode:
if Bass_GetVersion() <> DWORD(MAKELONG(2, 1)) then // Da kommt die Exception
  begin
    Error('BASS.DLL 2.1 nicht geladen!' + #10 + 'Ihre BASS.DLL-Version: %s',
      [Bass_GetVersion()], EBassLoadError);
  end;
ändern zu:
Delphi-Quellcode:
if Bass_GetVersion() <> DWORD(MAKELONG(2, 1)) then
  begin
    Error('BASS.DLL 2.1 nicht geladen!' + #10 + 'Ihre BASS.DLL-Version: %d.%d',
      [LoWord(Bass_GetVersion()),HiWord(Bass_GetVersion())], EBassLoadError);
  end;
weil: BASS_GetVersion: DWORD;

Die Muhkuh 12. Jul 2005 16:43

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Hi Matti,

dass mit dem PC Neustarten habe ich versucht, aber ich bekomme den Fehler trotzdem.

Ich hab es auch nochmal mit einem neuen Projekt versucht, aber dort ist der gleiche Fehler.

Luckie 12. Jul 2005 16:52

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Liegt die DLL denn im Anwendungsverzeichnis?

turboPASCAL 12. Jul 2005 17:52

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
Liste der Anhänge anzeigen (Anzahl: 1)
Versuch mal die Demo in Anhang, und prüfe deine BASS.DLL (neu downloaden).

Stelle sicher, dass die Bass.pas im Verzeichnis die einzige ist. (nicht das irgend wo noch eine andere event. alte Version vorhanden ist zB. im Delphi Bibliothekspfad)

Die Muhkuh 12. Jul 2005 18:08

Re: Bass.dll: BASS_GetVersion() -> AV an Adresse 0x000000
 
@Luckie

ja

@Matti,

danke. Es lag an meiner Bass.pas. Ich hab die bass21.zip von beiden Servern runtergeladen, aber jedesmal ging es nicht. Mit deiner Bass.pas geht es nun. Der Unterschied in den Bass.pas liegt daran, dass manche function in deiner Bass.pas als proceduren deklariert sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz