Avatar billede stigc Nybegynder
18. september 2000 - 21:45 Der er 13 kommentarer og
5 løsninger

små programmer med builder

Findes der en måde at gøre programmer man udvikler med builder (jeg bruger version 4.0)mindre? Jeg har linket mine programmer statisk da de skal virker på alle computere. Der er lidt irreterende at de så allerede fylder 250 kb, uden nogen videre funktionalitet. Findes der måske et andet program, som kan tage alt det udnødvendige ud af mine exe filer?
Avatar billede lrj Nybegynder
18. september 2000 - 23:28 #1
Er det et problem at de fylder 250kb? Det er en slags minimums-størrelse hvis du vil bruge en grafisk brugergræseflade. Er det et rent DOS-program du laver kan du godt få det ned på 20-30Kb. Men så ser det jo ikke fedt ud..

Mit råd er at ikke fokusere på størrelsen på din exe-fil. Desuden vil der gå lang tid (meget kode) før filen vokser nævneværdigt igen... Det er en slags \"standard-pakke\" som du får med.
Avatar billede powell Nybegynder
19. september 2000 - 08:28 #2
Du kan ved at lige dine funktioner ud i dll-filer reducere størelsen på dit hovedrogram, og den computer, hvor programmet så skal køre på, vil kun hente de funktioner der er nødvendig for at køre den enkelte del af det valg de har foretaget i softwaren. Det er da smart...
Avatar billede stigc Nybegynder
19. september 2000 - 09:32 #3
Det genere mig når man støder ind i programmer som fylder 10-20 kb, som også kører med windows  grafiske brugergrænseflade. De er nok lavet med visual c++, som bruger dynmaisk linkings med dll filer, som med 100 % findes på en hver windows maskine (det er er min opfattelse).

Hvad kan jeg gøre for at lave mindre filer?
Avatar billede martinlind Nybegynder
19. september 2000 - 09:38 #4
Kig på nettet efter XCL - KOL - ACL, det er delphi projecter der får delphi til at lave exe filer på 50kb istedet for ca 300kb, jeg ved ikke om de også kan køre med C-Builder, men du kan da prøve at kigge.
Avatar billede lrj Nybegynder
19. september 2000 - 17:03 #5
Små filer kan også laves hvis du er interesseret i at lave skummel lavniveau windows-programmering. Hvis du selv vil sørge for at definere dine window-klasser, registrere dem med windows og lave instanser af dem. Men så snakker vil 30-40 linjer kode for at lave et tomt vindue - uden noget i...
Avatar billede borrisholt Novice
20. september 2000 - 11:57 #6
SITGC > som lrj sige noget med at \"lave skummel lavniveau windows-programmering\". Men hvis du er 100 meter mester i windows API samt MFC programmering, så go ahead. Hvis du skal have dine programmer meget små er du nødtil at skifte compiler til M$ VC++ den laver små programmer.

Det følgende er et eksempel på en MFC programm der laver en vindue, som du så kan trække en fil ind på for så at få den dumpet til skærmen ....

#include <afxwin.h>


char FileName[51200]=\"\";

class MfcSkellet : public CWinApp
{
public:
  virtual BOOL InitInstance();
};

class CMainWindow : public CFrameWnd
{
protected: 
  afx_msg void OnPaint();
  afx_msg void OnDropFiles(HDROP hDropInfo);   
  DECLARE_MESSAGE_MAP();
public:
  CMainWindow();
};

MfcSkellet program;

BOOL MfcSkellet::InitInstance()

  CreateFileMapping((HANDLE)0xFFFFFFFF , NULL, PAGE_READWRITE,0, 1024, \"Sekllet\"); 

  if (GetLastError() != ERROR_ALREADY_EXISTS)
  {
      m_pMainWnd = new CMainWindow;
      m_pMainWnd->ShowWindow(m_nCmdShow);
      m_pMainWnd->UpdateWindow();
      m_pMainWnd->DragAcceptFiles();
  } 
  return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
  ON_WM_PAINT()
  ON_WM_DROPFILES()
END_MESSAGE_MAP()

CMainWindow::CMainWindow()
{
  Create(NULL, \"Programmering med MFC\");
}

void CMainWindow::OnDropFiles(HDROP hDropInfo)           
{   
    char Tmp[MAX_PATH];
    DragQueryFile(hDropInfo, 0, Tmp, _MAX_PATH);           
    FileName[0]=0;
    SetWindowText(Tmp);
    FILE *file=fopen(Tmp,\"rt\");
   
    if (GetFileSize( (HANDLE) _fileno(file), NULL) > sizeof(FileName))
      while (fgets( Tmp , MAX_PATH, file))
        strcat(FileName, Tmp);
    fclose(file);

    DragFinish(hDropInfo);                               
    InvalidateRect(NULL);
}                                                       

void CMainWindow::OnPaint()
{
  CPaintDC dc(this);
  CRect rect;
  GetClientRect(&rect);   
  dc.DrawText(FileName, -1, &rect, DT_LEFT | DT_TOP);
}

Lækkert og elegant ikke ? Nej vel ..

hele ideen bag Borlands C Biulder er jo netop at det skal være nemt, og alt det grafiske er lavet for dig .. Det må nødvendig vis give en del over heap og deraf følgende stører exefiler ...

En gylden middelvej vil være at linke dynamisk ... Det vil dog kræve du distribuerer dine bibloteker sammen med din exefil ...

jens B
Avatar billede martinlind Nybegynder
20. september 2000 - 12:09 #7
Jeg tror vi kan konkludere at det ikke kan lade sig gøre at lave en lille exe nemt, MS C++ snyder jo ligesom VB, fordi de kan benytte sig af MFC runtime lib. som jo kommer med alle windows versioner, så brug det eller slå runtime package til, hvis man kan det i C-builder, det kan man i delphi, hvilket betyder at du så skal sende dine runtime lib. med din exe, så det samlede resultat bliver som regl lidt støre men exe filen er lille.
Avatar billede lrj Nybegynder
21. september 2000 - 00:03 #8
martinlind> Well, det er ikke helt rigtigt - der \"snydes\" ikke nødvendigvis - du kan rent faktisk bruge windows indbyggede metoder til at generere vinduer med. Og det er en del af operativsystemet.. Så den er god nok :)
Avatar billede codewarrior Nybegynder
22. september 2000 - 10:00 #9
Hvis du ikke er til ren winAPI programmering, kan du lave en exe komprimering af din exe fil, til det skal du bruge UPX som kan findes på en af følgende  adresser

http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
                  http://www.nexus.hu/upx
                    http://upx.tsx.org

Den fjerner det meste \"crap\" som builderen linker ind i programmet
Avatar billede stigc Nybegynder
24. september 2000 - 23:09 #10
codewarrior  >> Programmet du henviser til, komprimerer den ikke bare filen, og pakker den ud når man starter programmet igen?
Avatar billede lrj Nybegynder
25. september 2000 - 00:06 #11
stigc> Korrekt.
Avatar billede stigc Nybegynder
25. september 2000 - 11:53 #12
Findes der et program, der kan tage at konvertere C++ skrevet i builder og til VCL, om til direkte MFC programmering? UPX pakker jo bare koden. Godt nok lidt bedere end zip. Jeg vil ønske at man kunne smide udnødvendig data ud af filen først, også derefter pakke filen.
Avatar billede codewarrior Nybegynder
26. september 2000 - 19:47 #13
Det er rigtigt at programmet pakker applikationen, men der kræves ikke noget ekstra program til at kører den pakkede applikation, hele exefilen er pakket sammen, og det er først når applikationen skal køres, at det pakkes ud i hukommelsen, det er altså ikke som en zip fil eller ligende.

Håber ikke at forklaringen var alt for snirklet
Avatar billede stigc Nybegynder
26. september 2000 - 20:01 #14
Jammen det er der også et helt fint program, men hvad med først at tage det unnødvendig væk fra filen, og dernæst bruge det omtalte program. Det ville være optilmalt.
Avatar billede lrj Nybegynder
26. september 2000 - 20:02 #15
stigc> Det vil nok være for komplekst at lave et sådant program. Hvad skulle vi så med programmører? Enten må du selv lære MFC (hvilket skulle være svært, og unødvendigt, IMHO), eller evt. bruge en exe-pakker og så leve med størrelsen.

That\'s the modern world.
Avatar billede codewarrior Nybegynder
27. september 2000 - 19:30 #16
Irj har ret, hvis man virkelig skulle optimere
Builder programmerne, skulle man starte med at ændre det meste af koden til selve VCL\'en og jeg kan ikke forestille mig at det ville være spændende.
Man kunne måske også bruge MFC vizard\'en det kunne være at den ville give en mere kompakt kode, men igen så bliver det på bekostning af hvad der hedder visuel programmering
Avatar billede borrisholt Novice
30. oktober 2000 - 16:41 #17
Kommer der nyt i denne sag Stig ?

Jens B
Avatar billede stigc Nybegynder
06. november 2000 - 13:14 #18
tak for en god diskussion!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester