Programme in C++. Entwicklerforum
Anonymous
NEU 64-BIT DEV (Old 32-Bit Dev): Warum ist meine 64-Bit-ausführbare Datei so riesig?
Post
by Anonymous » 12 Jul 2025, 20:00
Ich habe mich seit V3 im C ++ - Builder entwickelt. Der größte Teil meiner Arbeit wurde in V5 und V6 erledigt. Ich bin gerade jetzt nach ein paar Jahren wieder darauf zurück und probiere die Community Edition und die 64-Bit-Welt aus. Ich habe ein kleines Dienstprogramm als erstes Projekt in der neuen Umgebung portiert. Es wird nur Standard -Windows -Steuerelemente (Bearbeiten, Schaltfläche, Kontrollkästchen usw.) und eine einzelne Socket -Steuerung verwendet. Es sind weniger als 400 Codezeilen in einem einzigen Windows -Formular. Was kann ich tun, um es zu reduzieren? Das scheint mir absurd groß zu sein, was es ist. Die ausführbare Datei erstellt in V6 zu 540 kb. Ich hatte in der aktuellen Version nicht mehr als 17 MB für denselben Code erwartet. < /P>
Code: Select all
///////////////////////
// formMain.h
///////////////////////
#ifndef formMainH
#define formMainH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TfMain : public TForm
{
__published: // IDE-managed Components
TEdit *eScan;
TComboBox *cbPrinter;
TSpeedButton *bClear;
TLabel *lDecoded;
TCheckBox *ckAutoPrint;
TBitBtn *bPrint;
TBitBtn *bClose;
TLabel *lScan;
TLabel *lDecode;
TLabel *lPrinter;
TLabel *lPrinterIPAddress;
TClientSocket *Sock;
int __fastcall isCPSBarcode(AnsiString Str);
int __fastcall isIPAddress(AnsiString Str);
void __fastcall bCloseClick(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall cbPrinterSelect(TObject *Sender);
void __fastcall eScanChange(TObject *Sender);
void __fastcall bPrintClick(TObject *Sender);
void __fastcall SockConnect(TObject *Sender, TCustomWinSocket *Socket);
void __fastcall SockDisconnect(TObject *Sender, TCustomWinSocket *Socket);
void __fastcall eScanKeyPress(TObject *Sender, System::WideChar &Key);
void __fastcall bClearClick(TObject *Sender);
void __fastcall SockError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
TStringList *printerNames;
TStringList *printerIPAddresses;
AnsiString selectedIPAddress;
AnsiString defaultPrinter;
public: // User declarations
__fastcall TfMain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfMain *fMain;
//---------------------------------------------------------------------------
#endif
//////////////////////
// formMain.cpp
//////////////////////
#include
#pragma hdrstop
#include "formMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfMain *fMain;
//---------------------------------------------------------------------------
__fastcall TfMain::TfMain(TComponent* Owner) : TForm(Owner)
{
printerNames = new TStringList;
printerIPAddresses = new TStringList;
}
//---------------------------------------------------------------------------
void __fastcall TfMain::FormShow(TObject *Sender)
{
AnsiString thisPort("");
AnsiString defaultPrinter("");
int defaultPrinterIdx = -1;
TRegistry *Reg = new TRegistry;
// Get network printer names and IP addresses from Windows registry
// Locally connected printers are skipped since we will be using a TCP
// socket to communicate with the printer
Reg->RootKey = HKEY_LOCAL_MACHINE;
if(Reg->OpenKeyReadOnly("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers")){
Reg->GetKeyNames(printerNames);
Reg->CloseKey();
for(int i = 0; i < printerNames->Count; i++){
if(Reg->OpenKeyReadOnly(
"\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\"
+ printerNames->Strings[i])){
thisPort = Reg->ReadString("Port");
if(isIPAddress(thisPort)){
cbPrinter->Items->Add(printerNames->Strings[i]);
printerIPAddresses->Add(thisPort);
}
Reg->CloseKey();
}
}
}
else{
if(Application->MessageBox(L"Unable to open registry!",L"Error",MB_OK))
Close();
}
delete Reg;
// Get default printer from last run
Reg = new TRegistry;
if(Reg->OpenKey("\\SOFTWARE\\TCC\\BinLabelShrink", true)){
if(Reg->ValueExists("DefaultPrinter"))
defaultPrinter = Reg->ReadString("DefaultPrinter");
if(Reg->ValueExists("AutoPrint"))
ckAutoPrint->Checked = Reg->ReadBool("AutoPrint");
if(defaultPrinter.Length())
for(int i = 0; i < cbPrinter->Items->Count; i++)
if(cbPrinter->Items->Strings[i] == defaultPrinter)
defaultPrinterIdx = i;
if(defaultPrinterIdx > -1){
cbPrinter->ItemIndex = defaultPrinterIdx;
cbPrinterSelect(cbPrinter);
}
else if(Reg->ValueExists("DefaultPrinter")) // The defaultPrinter wasn't found, so clear it
Reg->WriteString("DefaultPrinter","");
Reg->CloseKey();
}
delete Reg;
}
//---------------------------------------------------------------------------
void __fastcall TfMain::bCloseClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfMain::cbPrinterSelect(TObject *Sender)
{
selectedIPAddress = printerIPAddresses->Strings[((TCustomCombo*)Sender)->ItemIndex];
lPrinterIPAddress->Caption = selectedIPAddress;
if(isCPSBarcode(eScan->Text))
bPrint->Enabled = true;
eScan->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfMain::eScanChange(TObject *Sender)
{
int strLen;
int semiColonIdx;
int dashIdx;
AnsiString fullStr;
// Sample scan string "A:19:18:1;0-12680bB"
Sleep(100);
if(eScan->Text[eScan->Text.Length()] == ' '){
eScan->Text = eScan->Text.TrimRight();
eScan->SelStart = eScan->Text.Length();
eScan->SelLength = 0;
}
if(isCPSBarcode(eScan->Text)){
eScan->Font->Style = TFontStyles() ItemIndex > -1){
bPrint->Enabled = true;
if(ckAutoPrint->Checked) // Fire off print if we're on auto
bPrintClick(this);
}
}
else{
if(eScan->Text.Length()){
eScan->Color = clWindow;
eScan->Font->Color = clWindowText;
eScan->Font->Style = TFontStyles();
if(eScan->Text.Pos("
1752343208
Anonymous
Ich habe mich seit V3 im C ++ - Builder entwickelt. Der größte Teil meiner Arbeit wurde in V5 und V6 erledigt. Ich bin gerade jetzt nach ein paar Jahren wieder darauf zurück und probiere die Community Edition und die 64-Bit-Welt aus. Ich habe ein kleines Dienstprogramm als erstes Projekt in der neuen Umgebung portiert. Es wird nur Standard -Windows -Steuerelemente (Bearbeiten, Schaltfläche, Kontrollkästchen usw.) und eine einzelne Socket -Steuerung verwendet. Es sind weniger als 400 Codezeilen in einem einzigen Windows -Formular. Was kann ich tun, um es zu reduzieren? Das scheint mir absurd groß zu sein, was es ist. Die ausführbare Datei erstellt in V6 zu 540 kb. Ich hatte in der aktuellen Version nicht mehr als 17 MB für denselben Code erwartet. < /P> [code]/////////////////////// // formMain.h /////////////////////// #ifndef formMainH #define formMainH //--------------------------------------------------------------------------- #include #include #include #include #include #include #include //--------------------------------------------------------------------------- class TfMain : public TForm { __published: // IDE-managed Components TEdit *eScan; TComboBox *cbPrinter; TSpeedButton *bClear; TLabel *lDecoded; TCheckBox *ckAutoPrint; TBitBtn *bPrint; TBitBtn *bClose; TLabel *lScan; TLabel *lDecode; TLabel *lPrinter; TLabel *lPrinterIPAddress; TClientSocket *Sock; int __fastcall isCPSBarcode(AnsiString Str); int __fastcall isIPAddress(AnsiString Str); void __fastcall bCloseClick(TObject *Sender); void __fastcall FormShow(TObject *Sender); void __fastcall cbPrinterSelect(TObject *Sender); void __fastcall eScanChange(TObject *Sender); void __fastcall bPrintClick(TObject *Sender); void __fastcall SockConnect(TObject *Sender, TCustomWinSocket *Socket); void __fastcall SockDisconnect(TObject *Sender, TCustomWinSocket *Socket); void __fastcall eScanKeyPress(TObject *Sender, System::WideChar &Key); void __fastcall bClearClick(TObject *Sender); void __fastcall SockError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // User declarations TStringList *printerNames; TStringList *printerIPAddresses; AnsiString selectedIPAddress; AnsiString defaultPrinter; public: // User declarations __fastcall TfMain(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TfMain *fMain; //--------------------------------------------------------------------------- #endif ////////////////////// // formMain.cpp ////////////////////// #include #pragma hdrstop #include "formMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfMain *fMain; //--------------------------------------------------------------------------- __fastcall TfMain::TfMain(TComponent* Owner) : TForm(Owner) { printerNames = new TStringList; printerIPAddresses = new TStringList; } //--------------------------------------------------------------------------- void __fastcall TfMain::FormShow(TObject *Sender) { AnsiString thisPort(""); AnsiString defaultPrinter(""); int defaultPrinterIdx = -1; TRegistry *Reg = new TRegistry; // Get network printer names and IP addresses from Windows registry // Locally connected printers are skipped since we will be using a TCP // socket to communicate with the printer Reg->RootKey = HKEY_LOCAL_MACHINE; if(Reg->OpenKeyReadOnly("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers")){ Reg->GetKeyNames(printerNames); Reg->CloseKey(); for(int i = 0; i < printerNames->Count; i++){ if(Reg->OpenKeyReadOnly( "\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\" + printerNames->Strings[i])){ thisPort = Reg->ReadString("Port"); if(isIPAddress(thisPort)){ cbPrinter->Items->Add(printerNames->Strings[i]); printerIPAddresses->Add(thisPort); } Reg->CloseKey(); } } } else{ if(Application->MessageBox(L"Unable to open registry!",L"Error",MB_OK)) Close(); } delete Reg; // Get default printer from last run Reg = new TRegistry; if(Reg->OpenKey("\\SOFTWARE\\TCC\\BinLabelShrink", true)){ if(Reg->ValueExists("DefaultPrinter")) defaultPrinter = Reg->ReadString("DefaultPrinter"); if(Reg->ValueExists("AutoPrint")) ckAutoPrint->Checked = Reg->ReadBool("AutoPrint"); if(defaultPrinter.Length()) for(int i = 0; i < cbPrinter->Items->Count; i++) if(cbPrinter->Items->Strings[i] == defaultPrinter) defaultPrinterIdx = i; if(defaultPrinterIdx > -1){ cbPrinter->ItemIndex = defaultPrinterIdx; cbPrinterSelect(cbPrinter); } else if(Reg->ValueExists("DefaultPrinter")) // The defaultPrinter wasn't found, so clear it Reg->WriteString("DefaultPrinter",""); Reg->CloseKey(); } delete Reg; } //--------------------------------------------------------------------------- void __fastcall TfMain::bCloseClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TfMain::cbPrinterSelect(TObject *Sender) { selectedIPAddress = printerIPAddresses->Strings[((TCustomCombo*)Sender)->ItemIndex]; lPrinterIPAddress->Caption = selectedIPAddress; if(isCPSBarcode(eScan->Text)) bPrint->Enabled = true; eScan->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TfMain::eScanChange(TObject *Sender) { int strLen; int semiColonIdx; int dashIdx; AnsiString fullStr; // Sample scan string "A:19:18:1;0-12680bB" Sleep(100); if(eScan->Text[eScan->Text.Length()] == ' '){ eScan->Text = eScan->Text.TrimRight(); eScan->SelStart = eScan->Text.Length(); eScan->SelLength = 0; } if(isCPSBarcode(eScan->Text)){ eScan->Font->Style = TFontStyles() ItemIndex > -1){ bPrint->Enabled = true; if(ckAutoPrint->Checked) // Fire off print if we're on auto bPrintClick(this); } } else{ if(eScan->Text.Length()){ eScan->Color = clWindow; eScan->Font->Color = clWindowText; eScan->Font->Style = TFontStyles(); if(eScan->Text.Pos("
0 Replies
20 Views
Last post by Anonymous
25 Feb 2025, 09:28
0 Replies
26 Views
Last post by Anonymous
03 Apr 2025, 09:20
Old Spring und E-Mail-Validierung
by
Anonymous »
17 Jan 2025, 10:09 » in
Java
Für eine Middleware mit JVM 1.8_431 gibt es eine Spring-Anwendung
4.3.1.RELEASE
Ich habe ein Modell mit einem E-Mail-Feld, das ich validieren muss, und es wird durch diesen Code dargestellt:...
0 Replies
19 Views
Last post by Anonymous
17 Jan 2025, 10:09
0 Replies
14 Views
Last post by Guest
18 Feb 2025, 12:26
0 Replies
27 Views
Last post by Guest
12 Jan 2025, 02:44