AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DLL ignorieren wenn nicht im Pfad

Ein Thema von EWeiss · begonnen am 3. Jul 2013 · letzter Beitrag vom 3. Jul 2013
Antwort Antwort
Seite 2 von 2     12
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:06
Die Frage wäre dann wo liegt der Unterschied denn die von lbccaleb
vorgeschlagene funktioniert eigentlich so wie sie soll.

Muss ja nicht mit Gewalt ein Exeption erstellen wenn es vermeidbar ist.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.538 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:08
Viel interessanter finde ich die Frage, was passiert, wenn die DLL die entsprechende Routine gar nicht exportiert. Mit GetProcAddress erhalte ich einen Nil-Pointer, aber bei Delayed Loading?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:17
Viel interessanter finde ich die Frage, was passiert, wenn die DLL die entsprechende Routine gar nicht exportiert. Mit GetProcAddress erhalte ich einen Nil-Pointer, aber bei Delayed Loading?
Wie schon gesagt man muss nicht absichtlich exeption generieren..

Das reicht mir so für die eine function

  BASS_WASAPI_GetData : function(buffer: Pointer; length: DWORD): DWORD;
Delphi-Quellcode:
  if FileExists(ExtractFilePath(paramstr(0)) + basswasapi) then
  begin
    WasabiHandle := LoadLibrary(basswasapi);
    if WasabiHandle <> 0 then
    begin
      @BASS_WASAPI_GetData := GetProcAddress(WasabiHandle, 'BASS_WASAPI_GetData');
      if not Assigned (BASS_WASAPI_GetData) then
      begin
        ShowMessage('"Dynamic load"' + #13#10 + 'loading.. function BASS_WASAPI_GetData fail');
        Halt;
      end;
    end;
  end;
gruss

Geändert von EWeiss ( 3. Jul 2013 um 09:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.538 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:19
Ja eben, so hast Du wenigstens die Kontrolle, wenn auch etwas mehr Tipparbeit.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:26
Und der Rest macht auch keine Problem..

Delphi-Quellcode:
         if WasabiHandle and MixerHandle <> 0 then
         begin
           if UseWASAPI then
             Data := BASS_WASAPI_GetData(@SpectrumData, BASS_DATA_FFT2048)
           else
           Data := BASS_Mixer_ChannelGetData(FChannelId, @SpectrumData, BASS_DATA_FFT2048);

           if Data = -1 then
             BASS_ChannelGetData(FChannelId, @SpectrumData, BASS_DATA_FFT2048);
         end else
         BASS_ChannelGetData(FChannelId, @SpectrumData, BASS_DATA_FFT2048);
damit bin ich hiermit fertig

gruss
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:27
Ich sehe den Unterschied nicht. Das delayed -Schlüsselwort verursacht beim Aufruf genauso eine EExternalException wenn die Datei nicht existiert, als wenn der Einsprungspunkt nicht existiert.

Aber wie gesagt, mein Geschmack ist es trotzdem auch nicht, ich suche mir den Kram auch lieber mit GetProcAddress selbst zusammen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 09:29
Ich sehe den Unterschied nicht. Das delayed -Schlüsselwort verursacht beim Aufruf genauso eine EExternalException wenn die Datei nicht existiert, als wenn der Einsprungspunkt nicht existiert.

Aber wie gesagt, mein Geschmack ist es trotzdem auch nicht, ich suche mir den Kram auch lieber mit GetProcAddress selbst zusammen
Allemal schon interessant was anderes zu sehen aber manchmal ist mehr einfach Mehr

gruss
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#18

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 12:28
...
Delphi-Quellcode:
  if FileExists(ExtractFilePath(paramstr(0)) + basswasapi) then
  begin
    WasabiHandle := LoadLibrary(basswasapi);
    if WasabiHandle <> 0 then
    begin
      @BASS_WASAPI_GetData := GetProcAddress(WasabiHandle, 'BASS_WASAPI_GetData');
      if not Assigned (BASS_WASAPI_GetData) then
      begin
        ShowMessage('"Dynamic load"' + #13#10 + 'loading.. function BASS_WASAPI_GetData fail');
        Halt;
      end;
    end;
  end;
gruss
Noch nen Tipp am Rand: Ich würde es noch vermeiden bei einem erkannten Fehler die Anwendung einfach mit Halt zu beenden. Du könntest in dem Fall nen bereits geladenen Teil im Speicher behalten.
Beende also die Anwendung normal und stell sicher das alles entladen wurde.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 14:50
delayed bedeutet doch nur, daß die DLL überhaupt erst dann geladen wird, wenn sie auch verwendet wird (Arbeitsspeicherentlastung), die Direktive entbindet nicht von der Verantwortung zu prüfen, ob die DLL da ist und funktioniert.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: DLL ignorieren wenn nicht im Pfad

  Alt 3. Jul 2013, 16:14
Zitat:
Ich würde es noch vermeiden bei einem erkannten Fehler die Anwendung einfach mit Halt zu beenden.
In Anwendungen mache ich das auch nicht.
Aber bei dieser Bibliothek welche nur als wrapper funktioniert dürfte das egal sein.

Die Plugins beenden sich von allein.

Aber wenn ud meinst es wäre besser kann ich es ohne probleme noch ändern.

Delphi-Quellcode:
      if not Assigned (BASS_Mixer_ChannelGetData) then
      begin
        ShowMessage('"Dynamic load"' + #13#10 + 'loading.. function BASS_Mixer_ChannelGetData fail');
        FreeLibrary(MixerHandle);
        BassVis1.QuitVisPlugin;
      end;

gruss

Geändert von EWeiss ( 3. Jul 2013 um 16:21 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:34 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