Wysyłanie rekordów w DLL (dynamicznie)

0

Witam,
Mam problem z biblioteką DLL (wzoruje się na artykule Adama Boducha w kompedium (o tagach mp3).
Program główny ładuje procedurę z biblioteki mp3dll.dll statycznie... a ja chciałbym to zrobić dynamicznie...
Napisałem coś takiego:

procedure LoadDll(const lpFileName : PChar; Tag : TMp3);
var
DLL:THandle;
LoadTag:procedure(FileName:PChar; Tag:PMp3);
begin
DLL:=LoadLibrary('mp3dll.dll');
@LoadTag:=GetProcAddress(dll,'LoadTag');
LoadTag(lpFilename,@Tag);
end;

var
  Tag : TMp3;
begin
  LoadDLL('D:\Mp3\loco.mp3', Tag);
  Writeln(Tag.Title);
  Writeln(Tag.Artist);
  Readln;
end.

Biblioteka mp3dll.dll jest taka sama jak w artykule, nic nie zmieniałem...
Proszę o pomoc i z góry dziękuje...

0

Nie rozumiem, w czym problem?

0

Ten kod nie działa :(

0

nie działa bo ...............................................................................

0

Słuchaj, nie jesteśmy cechem wróżek. Chcesz pomocy, to podaj, co Ci nie działa, w którym miejscu, w jakich okolicznościach, jakie komunikaty się pokazują i tak dalej, a jeśli Ci się nie chce, to nie zawracaj ludziom głowy.

0

Żaden komunikat się nie pokazuje... Po skompilowaniu i uruchomieniu programu konsola się pojawia na ułamek sekundy i znika... i to wszystko (powinno zostać okienko bo jest ReadLn). Nie mam pojęcia co może być złego w procedurze LoadDLL... kompilator nie zwraca żadnych błędów a indormacji o tagach nie mam.
Przepraszam za zamieszanie...

0

to teraz wypadało by
a) zapoznać się z debugerem :>
b) podać kod exeka
c) podać kod dllki

0

kod EXE jest w pierwszym poście...
TMp3 wygląda tak:

type
  PMp3 = ^TMp3;
  TMp3 = packed record
    ID: String[3]; // czy Tag istnieje?
    Title : String[30]; // tytuł
    Artist : String[30]; // wykonawca
    Album : String[30]; // album
    Year : String[4]; // rok wydania
    Comment : String[30]; // komentarz
    Genre : String[30]; // typ - np. POP, Techno, Jazz itp.
  end;

kod bliblioteki DLL jest taki sam jak mp3dll.dll (kompedium, rozdział o DLL -> czytanie tagów mp3)
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_10#id-Odczyt-tagu-z-pliku-mp3

0
procedure LoadDll(const lpFileName: PChar; var Tag: TMp3);
var
  DLL: THandle;
  LoadTag: procedure(FileName: PChar; Tag: PMp3); stdcall;
begin
  DLL      := LoadLibrary('mp3dll.dll');
  if DLL <> 0 then
  begin
    @LoadTag := GetProcAddress(dll, 'LoadTag');
    if @LoadTag <> nil  then
      LoadTag(lpFilename, @Tag);
  end;
end;

widzisz już gdzie masz błąd??

0

Dziękuje bardzo! Do końca życia będę pamiętać o

stdcall

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1