Wysyłanie rekordów w DLL (dynamicznie)

Odpowiedz Nowy wątek
2006-08-13 12:27
kamil_
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...

Pozostało 580 znaków

2006-08-13 20:17
0

Nie rozumiem, w czym problem?


Mam nadzieję, że pomogłem :)

Łukasz Brodny

Pozostało 580 znaków

2006-08-14 10:52
kamil_
0

Ten kod nie działa :(

Pozostało 580 znaków

2006-08-14 12:17
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-14 14:17
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.


Mam nadzieję, że pomogłem :)

Łukasz Brodny

Pozostało 580 znaków

2006-08-15 12:12
kamil_
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...

Pozostało 580 znaków

2006-08-15 12:35
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-15 12:57
kamil_
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)
Rozdział 10

Pozostało 580 znaków

2006-08-15 14:04
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??


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-15 15:34
kamil_
0

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

stdcall

:)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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