C ++ Forum | | | | - Seite 1 - |
| Detlef Jagolski | Hallo Sebastian,
ich bekomme seit heute beim Linken meines mittelgroßen Projektes eine Linker Fehlermeldung:
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland "C rogrammeBorlandBCC55incc32.exe" -o".objPrfMain.obj" -c -w-8026 -w-8057 -w-8060 -w-8017 -w-8004 -w-8066 -w-8041 -w-8027 -q -O2 -tWM -v- -D_WINVER=0x0400 -D_WIN32_WINNT=0x0400 -I"C rogrammeBorlandBCC55include" PrfMain.cpp PrfMain.cpp: "C rogrammeBorlandBCC55incc32.exe" -o".objBusiness-Calc_Edition_2010.obj" -c -w-8026 -w-8057 -w-8060 -w-8017 -w-8004 -w-8066 -w-8041 -w-8027 -q -O2 -tWM -v- -D_WINVER=0x0400 -D_WIN32_WINNT=0x0400 -I"C rogrammeBorlandBCC55include" Business-Calc_Edition_2010.cpp Business-Calc_Edition_2010.cpp: "C rogrammeBorlandBCC55inilink32.exe" @MAKE0000.@@@ Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Error detected (IMP302) Fatal: Access violation. Link terminated. ** error 2 ** deleting "Business-Calc_Edition_2010.exe" Finished.
oder
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland "C rogrammeBorlandBDS4.0incc32.exe" -o".objPrfMain.obj" -c -w-8026 -w-8057 -w-8060 -w-8017 -w-8004 -w-8066 -w-8041 -w-8027 -q -O2 -tWM -v- -D_WINVER=0x0400 -D_WIN32_WINNT=0x0400 -I"C rogrammeBorlandBDS4.0include" PrfMain.cpp PrfMain.cpp: "C rogrammeBorlandBDS4.0incc32.exe" -o".objBusiness-Calc_Edition_2010.obj" -c -w-8026 -w-8057 -w-8060 -w-8017 -w-8004 -w-8066 -w-8041 -w-8027 -q -O2 -tWM -v- -D_WINVER=0x0400 -D_WIN32_WINNT=0x0400 -I"C rogrammeBorlandBDS4.0include" Business-Calc_Edition_2010.cpp Business-Calc_Edition_2010.cpp: "C rogrammeBorlandBDS4.0inilink32.exe" @MAKE0000.@@@ Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland Warning: CODE : 0x0000014f / 0x00400000 Warning: DATA : 0x000000a3 / 0x00400000 Warning: DEBSYM : 0x0000000e / 0x00400000 Warning: Extdef flags : 0x00000021 / 0x00004000 Warning: Extdefs : 0x00000084 / 0x00004000 Warning: Import symbols : 0x00000000 / 0x00100000 Warning: OBJ symbols : 0x00000b60 / 0x00100000 Warning: Public GSX : 0x0000003c / 0x000c0000 Warning: Publics : 0x0000021c / 0x000c0000 Warning: SegRelocs : 0x00000438 / 0x00400000 Warning: StringBlock : 0x0000000a / 0x00400000 Warning: Virdefs : 0x00000004 / 0x00020000 Warning: BSS : 0x00000000 / 0x00400000 Warning: CODE : 0x0025c2da / 0x00400000 Warning: D:/Eigene Daten/Programmieren/Profan/Business-Calc/Business-Calc_Edition_2010_cpp/Business-Calc_Edition_2010.ilc: 0x00010000 / 0x03000000 Warning: D:/Eigene Daten/Programmieren/Profan/Business-Calc/Business-Calc_Edition_2010_cpp/Business-Calc_Edition_2010.ild: 0x00010000 / 0x03000000 Warning: D:/Eigene Daten/Programmieren/Profan/Business-Calc/Business-Calc_Edition_2010_cpp/Business-Calc_Edition_2010.ilf: 0x00010000 / 0x03000000 Warning: D:/Eigene Daten/Programmieren/Profan/Business-Calc/Business-Calc_Edition_2010_cpp/Business-Calc_Edition_2010.ils: 0x00050000 / 0x03000000 Warning: D:/Eigene Daten/Programmieren/Profan/Business-Calc/Business-Calc_Edition_2010_cpp/Business-Calc_Edition_2010.tds: 0x00010000 / 0x06000000 Warning: DATA : 0x000d9830 / 0x00400000 Warning: Extdef flags : 0x000000aa / 0x00004000 Warning: Extdefs : 0x000002a8 / 0x00004000 Warning: Import symbols : 0x00000000 / 0x00100000 Warning: OBJ symbols : 0x00021e8c / 0x00100000 Warning: Public GSX : 0x00002700 / 0x000c0000 Warning: Publics : 0x00015f00 / 0x000c0000 Warning: SegRelocs : 0x00000014 / 0x00400000 Warning: StringBlock : 0x0000001f / 0x00400000 Warning: UNKNOWN : 0x00000006 / 0x00400000 Warning: Virdefs : 0x0000101c / 0x00020000 Warning: unknown heap name : 0x03000000 / 0x03000000 Fatal: Speicherbeschrõnkung f³r Block SegRelocs in Modul Business-Calc_Edition_2010.cpp wurde ³berschritten ** error 2 ** deleting "Business-Calc_Edition_2010.exe" Finished.
Kannst Du mir einen Tipp geben?
Gruß
Detlef |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 29.01.2010 ▲ |
| |
| | | | | - Seite 1 - |
| | Ich weiß leider nicht einfach einen Schalter X, um das Problem so zu lösen.
Ich sehe jetzt erst die Meldung "... Block SegRelocs überschritten", vlt. ist dem Linker das Objekt zu groß. Was auch sein kann, dass dem Linker lediglich eine Funktion zu groß ist statt das ganze Objekt, hierbei könnte etwas "Umschreiben" der Funktion helfen - also Teile der Funktion wiederum in Funktionen aufteilen und diese neuen Funktion dann aber nicht als Unterfunktionen deklarieren. Vlt. bekommst Du es aber auch z.B. mit PoLink gelinkt, z.B. einfach hier von [...] herunterladen. Wenn nicht, dann müsste da Sebastian einfach mal ran, andernfalls müsstest Du halt das Programm teilen, ein Workaround wäre vlt. mit Profan2CPP aus Programmteilen eine DLL herstellen um die Funktionen aus dieser dann dem Programm erst zur Laufzeit hinzuzufügen. Egal mal wie, irgendwelche Grenzen und das Aufteilen in kleinere Arbeitsschritte gibts immer. Ich mag an XProfan, dass ich mit PRCs als "Module" arbeiten kann, was mir z.B. das Programmieren unheimlich erleichtert. Mit Profan2CPP kann man ja ähnlich arbeiten, wie man "teilt" ist ja fast egal. |
| | | | |
| | Detlef Jagolski | Hallo IF, erst einmal Danke für Deine Vorschläge.
Aus der Hilfe von Profan2Cpp: Eine größere Einschränkung gibt es leider: Innerhalb der DLL sollten keine Befehle oder Funktionen, die Fenster oder Fensterelemente erzeugen, verwendet werden; das Verhalten ist sonst unvorhersehbar.
Mein Programm hat jetzt ca. 24000 Zeilen, und ist zu ca. 30% fertig. Das sind nur Dialoge, Edit‘s usw. Alles andere ist schon in vier Dll‘s untergebracht. Ich hoffe dass Sebastian noch eine Idee hat. Gruß Detlef |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.01.2010 ▲ |
| |
| | | Hast Du einfach schonmal (s.o.) einen anderen Linker wie z.B. POLink probiert? |
| | | | |
| | Detlef Jagolski | Den werde ich gleich noch Testen. |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.01.2010 ▲ |
| |
| | | Sag mal "Fensterelemente erzeugen" ist doch selten, den größten Teil sollte das doch nicht betreffen. |
| | | | |
| | Detlef Jagolski | Fensterelemente
Und damit meine ich Texte, Buttons, Checkboxes, Selectfelder, Radiobuttons, Übersichtsfelder usw.
Oder was meint Sebastian in der Hilfe mit Fensterelemente? |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.01.2010 ▲ |
| |
| | | Durchschnittlich sind doch die wenigsten Zeilen beschäftigt, Elemente zu erstellen, statt mit diesen zu hantieren - kenne aber den Code nicht. Wie groß ist denn die Objektdatei? Zeilenzahl sagt ja nichts über die Anzahl der Anweisungen/ Programmgröße aus. |
| | | | |
| | Detlef Jagolski | OBJ Datei 4401 KB Programm 3,7 MB |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.01.2010 ▲ |
| |
| | | | - Seite 2 - |
| | | Eine 4 MB OBJ ist schon riesig, XProfan kommt mit einem Virtel dessen aus.
Ich weiß, dass es nicht die "Optimierungstips" sind, welche Du grad brauchst, aber sie "funktionieren" unabhängig.
Vlt. könntest Du mal eine INC oder einen Programmteil zeigen, von dem du überhaupt nicht wüsstest, wie dieser wegzuoptimieren ist. |
| | | | |
| | Detlef Jagolski |
Proc DesignForm_Lieferantendaten
Declare DesignForm&
Declare dlgexit%
Declare Dlg2Button1&
Declare Dlg2Button2&
Declare Dlg2Button3&
Set("TrueColor", 1)
DesignForm&=Create("Dialog",%hwnd,"Lieferantenstammdaten",%maxX + 5,114,521,415)
Text1&=Create("Text",DesignForm&,"Lieferanten-Nr.:",20,100,102,17)
SetFont Text1&,TextFont4&
Text2&=Create("Text",DesignForm&,"Anrede:",20,120,62,17)
SetFont Text2&,TextFont1&
Text3&=Create("Text",DesignForm&,"Name 1:",20,140,52,17)
SetFont Text3&,TextFont1&
Text4&=Create("Text",DesignForm&,"Name 2:",20,160,52,17)
SetFont Text4&,TextFont1&
Text5&=Create("Text",DesignForm&,"Straße:",20,180,52,17)
SetFont Text5&,TextFont1&
Text6&=Create("Text",DesignForm&,"Land/Plz/Ort:",20,200,92,17)
SetFont Text6&,TextFont1&
Text7&=Create("Text",DesignForm&,"PLZ/Postfach:",20,220,92,17)
SetFont Text7&,TextFont1&
Text8&=Create("Text",DesignForm&,"Telefon:",20,240,72,17)
SetFont Text8&,TextFont1&
Text9&=Create("Text",DesignForm&,"Telefax:",20,260,82,17)
SetFont Text9&,TextFont1&
Text10&=Create("Text",DesignForm&,"Email:",20,280,62,17)
SetFont Text10&,TextFont1&
Text11&=Create("Text",DesignForm&,"URL:",20,300,82,17)
SetFont Text11&,TextFont1&
Text12&=Create("Text",DesignForm&,"Ansprechpartner:",20,320,122,17)
SetFont Text12&,TextFont1&
Text13&=Create("Text",DesignForm&,"Mobil:",20,340,52,17)
SetFont Text13&,TextFont1&
DlgEdit1&=Create("Edit",DesignForm&,"",170,100,121,21)
SetFont DlgEdit1&,TextFont4&
SendMessage(DlgEdit1&,~EM_LIMITTEXT,15,0)
DlgChoiceBox1&=Create("ChoiceBox",DesignForm&,"",170,120,82,120)
ClearList
AddString "Firma"
AddString "Frau"
AddString "Herr"
MoveListToChoice(DlgChoiceBox1&)
ClearList
SendMessage(DlgChoiceBox1&,~CB_SETCURSEL,0,0)
SetFont DlgChoiceBox1&,TextFont4&
DlgEdit2&=Create("Edit",DesignForm&,"",170,140,242,21)
SetFont DlgEdit2&,TextFont4&
SendMessage(DlgEdit2&,~EM_LIMITTEXT,35,0)
DlgEdit3&=Create("Edit",DesignForm&,"",170,160,242,21)
SetFont DlgEdit3&,TextFont4&
SendMessage(DlgEdit3&,~EM_LIMITTEXT,35,0)
DlgEdit4&=Create("Edit",DesignForm&,"",170,180,242,21)
SetFont DlgEdit4&,TextFont4&
SendMessage(DlgEdit4&,~EM_LIMITTEXT,35,0)
DlgEdit5&=Create("Edit",DesignForm&,"",170,200,32,21)
SetFont DlgEdit5&,TextFont4&
SendMessage(DlgEdit5&,~EM_LIMITTEXT,3,0)
SetStyle DlgEdit5&, GetStyle(DlgEdit5&) | ~ES_UPPERCASE
DlgEdit6&=Create("Edit",DesignForm&,"",200,200,72,21)
SetFont DlgEdit6&,TextFont4&
SendMessage(DlgEdit6&,~EM_LIMITTEXT,15,0)
DlgEdit7&=Create("Edit",DesignForm&,"",271,200,142,21)
SetFont DlgEdit7&,TextFont4&
SendMessage(DlgEdit7&,~EM_LIMITTEXT,25,0)
DlgEdit8&=Create("Edit",DesignForm&,"",170,220,72,21)
SetFont DlgEdit8&,TextFont4&
SendMessage(DlgEdit8&,~EM_LIMITTEXT,25,0)
DlgEdit9&=Create("Edit",DesignForm&,"",240,220,82,21)
SetFont DlgEdit9&,TextFont4&
SendMessage(DlgEdit9&,~EM_LIMITTEXT,25,0)
DlgEdit10&=Create("Edit",DesignForm&,"",170,240,152,21)
SetFont DlgEdit10&,TextFont4&
SendMessage(DlgEdit10&,~EM_LIMITTEXT,35,0)
DlgEdit11&=Create("Edit",DesignForm&,"",170,260,152,21)
SetFont DlgEdit11&,TextFont4&
SendMessage(DlgEdit11&,~EM_LIMITTEXT,35,0)
DlgEdit12&=Create("Edit",DesignForm&,"",170,280,242,21)
SetFont DlgEdit12&,TextFont4&
SendMessage(DlgEdit12&,~EM_LIMITTEXT,35,0)
DlgEdit13&=Create("Edit",DesignForm&,"",170,300,242,21)
SetFont DlgEdit13&,TextFont4&
SendMessage(DlgEdit13&,~EM_LIMITTEXT,35,0)
DlgEdit14&=Create("Edit",DesignForm&,"",170,320,242,21)
SetFont DlgEdit14&,TextFont4&
SendMessage(DlgEdit14&,~EM_LIMITTEXT,35,0)
DlgEdit15&=Create("Edit",DesignForm&,"",170,340,152,21)
SetFont DlgEdit15&,TextFont4&
SendMessage(DlgEdit15&,~EM_LIMITTEXT,35,0)
Dlg2Button1&=Create("Button",DesignForm&,"&Speichern",430,90,75,25)
SetFont Dlg2Button1&,ButtonFont1&
Dlg2Button2&=Create("Button",DesignForm&,"&Hilfe",430,120,75,25)
SetFont Dlg2Button2&,ButtonFont1&
Dlg2Button3&=Create("Button",DesignForm&,"&Abbrechen",430,350,75,25)
SetFont Dlg2Button3&,ButtonFont1&
SubClass DlgEdit1&,1
SubClass DlgEdit2&,1
SubClass DlgEdit3&,1
SubClass DlgEdit4&,1
SubClass DlgEdit5&,1
SubClass DlgEdit6&,1
SubClass DlgEdit7&,1
SubClass DlgEdit8&,1
SubClass DlgEdit9&,1
SubClass DlgEdit10&,1
SubClass DlgEdit11&,1
SubClass DlgEdit12&,1
SubClass DlgEdit13&,1
SubClass DlgEdit14&,1
SubClass DlgEdit15&,1
Case Lieferantenstammdaten% = 2: GetListView_Lieferantenstammdaten
SetFocus(DlgEdit1&)
SetWindowPos DesignForm& = CalcLeft(521),CalcTop(415) - 521,415;0
Clear dlgexit%
WhileNot dlgexit%
If GetText$(DlgEdit1&) = ""
EnableWindow Dlg2Button1&,0
Else
EnableWindow Dlg2Button1&,1
EndIf
WaitInput
If %key = 2
dlgexit% = 1
ElseIf Clicked(Dlg2Button1&)
If Lieferantenstammdaten% = 1
Pruefen_Lieferanten
Case &SQLCount = 0: INSERT_Lieferantenstammdaten
ElseIf Lieferantenstammdaten% = 2
UPDATE_Lieferantenstammdaten
EndIf
GetSatz_Lieferantenstammdaten
ElseIf Clicked(Dlg2Button2&)
ElseIf Clicked(Dlg2Button3&)
dlgexit% = 1
ElseIf %key = 5
Hilfe
EndIf
EndWhile
Clear Lieferantenstammdaten%
DestroyWindow(DesignForm&)
SubClass DlgEdit1&,0
SubClass DlgEdit2&,0
SubClass DlgEdit3&,0
SubClass DlgEdit4&,0
SubClass DlgEdit5&,0
SubClass DlgEdit6&,0
SubClass DlgEdit7&,0
SubClass DlgEdit8&,0
SubClass DlgEdit9&,0
SubClass DlgEdit10&,0
SubClass DlgEdit11&,0
SubClass DlgEdit12&,0
SubClass DlgEdit13&,0
SubClass DlgEdit14&,0
SubClass DlgEdit15&,0
EndProc
So sehe die Dialoge aus, alles andere ist in DLLs |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.01.2010 ▲ |
| |
| | | Rein was mit "Suchen und Ersetzen" zu machen wäre, z.B. bei:
Text2&=Create("Text",DesignForm&,"Anrede:",20,120,62,17)
SetFont Text2&,TextFont1&
Text3&=Create("Text",DesignForm&,"Name 1:",20,140,52,17)
SetFont Text3&,TextFont1&
Text4&=Create("Text",DesignForm&,"Name 2:",20,160,52,17)
SetFont Text4&,TextFont1&
Text5&=Create("Text",DesignForm&,"Straße:",20,180,52,17)
SetFont Text5&,TextFont1&
Text6&=Create("Text",DesignForm&,"Land/Plz/Ort:",20,200,92,17)
SetFont Text6&,TextFont1&
Text7&=Create("Text",DesignForm&,"PLZ/Postfach:",20,220,92,17)
SetFont Text7&,TextFont1&
Text8&=Create("Text",DesignForm&,"Telefon:",20,240,72,17)
SetFont Text8&,TextFont1&
Text9&=Create("Text",DesignForm&,"Telefax:",20,260,82,17)
SetFont Text9&,TextFont1&
Text10&=Create("Text",DesignForm&,"Email:",20,280,62,17)
SetFont Text10&,TextFont1&
Text11&=Create("Text",DesignForm&,"URL:",20,300,82,17)
SetFont Text11&,TextFont1&
Text12&=Create("Text",DesignForm&,"Ansprechpartner:",20,320,122,17)
SetFont Text12&,TextFont1&
Text13&=Create("Text",DesignForm&,"Mobil:",20,340,52,17)
SetFont Text13&,TextFont1&
DlgEdit1&=Create("Edit",DesignForm&,"",170,100,121,21)
SetFont DlgEdit1&,TextFont4&
vlt. zu
DlgEdit1&=Create("Edit",DesignForm&,"",170,100,121,21)
Text9&=Create("Text",DesignForm&,"Telefax:",20,260,82,17)
Text8&=Create("Text",DesignForm&,"Telefon:",20,240,72,17)
Text7&=Create("Text",DesignForm&,"PLZ/Postfach:",20,220,92,17)
Text6&=Create("Text",DesignForm&,"Land/Plz/Ort:",20,200,92,17)
Text5&=Create("Text",DesignForm&,"Straße:",20,180,52,17)
Text4&=Create("Text",DesignForm&,"Name 2:",20,160,52,17)
Text3&=Create("Text",DesignForm&,"Name 1:",20,140,52,17)
Text2&=Create("Text",DesignForm&,"Anrede:",20,120,62,17)
Text13&=Create("Text",DesignForm&,"Mobil:",20,340,52,17)
Text12&=Create("Text",DesignForm&,"Ansprechpartner:",20,320,122,17)
Text11&=Create("Text",DesignForm&,"URL:",20,300,82,17)
Text10&=Create("Text",DesignForm&,"Email:",20,280,62,17)
SetFont Text9&,TextFont1&
SetFont Text8&,TextFont1&
SetFont Text7&,TextFont1&
SetFont Text6&,TextFont1&
SetFont Text5&,TextFont1&
SetFont Text4&,TextFont1&
SetFont Text3&,TextFont1&
SetFont Text2&,TextFont1&
SetFont Text13&,TextFont1&
SetFont Text12&,TextFont1&
SetFont Text11&,TextFont1&
SetFont Text10&,TextFont1&
SetFont DlgEdit1&,TextFont4&
Wobei:
SetFont Text9&,TextFont1&
SetFont Text8&,TextFont1&
SetFont Text7&,TextFont1&
SetFont Text6&,TextFont1&
SetFont Text5&,TextFont1&
SetFont Text4&,TextFont1&
SetFont Text3&,TextFont1&
SetFont Text2&,TextFont1&
SetFont Text13&,TextFont1&
SetFont Text12&,TextFont1&
SetFont Text11&,TextFont1&
SetFont Text10&,TextFont1&
SetFont DlgEdit1&,TextFont4&
mit einer Funktion auf 1 Zeile reduzierbar wäre: und dann nur
Oder bei ständigen Edits mit Limittext
DlgEdit14&=Create("Edit",DesignForm&,"",170,320,242,21)
SetFont DlgEdit14&,TextFont4&
SendMessage(DlgEdit14&,~EM_LIMITTEXT,35,0)
einfach mit einer Hilfsfunktion myCreateEdit(DesignForm&,vorgabeText$,maxLen&,TextFont4&,X&,Y&,...) eine Zeile draus machen. Ebenso bei
SubClass DlgEdit1&,1
SubClass DlgEdit2&,1
SubClass DlgEdit3&,1
SubClass DlgEdit4&,1
SubClass DlgEdit5&,1
SubClass DlgEdit6&,1
SubClass DlgEdit7&,1
SubClass DlgEdit8&,1
SubClass DlgEdit9&,1
SubClass DlgEdit10&,1
SubClass DlgEdit11&,1
SubClass DlgEdit12&,1
SubClass DlgEdit13&,1
SubClass DlgEdit14&,1
SubClass DlgEdit15&,1
, warum nicht und aus
SubClass DlgEdit1&,0
SubClass DlgEdit2&,0
SubClass DlgEdit3&,0
SubClass DlgEdit4&,0
SubClass DlgEdit5&,0
SubClass DlgEdit6&,0
SubClass DlgEdit7&,0
SubClass DlgEdit8&,0
SubClass DlgEdit9&,0
SubClass DlgEdit10&,0
SubClass DlgEdit11&,0
SubClass DlgEdit12&,0
SubClass DlgEdit13&,0
SubClass DlgEdit14&,0
SubClass DlgEdit15&,0
vlt.
Damit sparst Du enorm.
Ich hab zwar kein Profan2Cpp aber Du kannst mir das Verzeichnis mit dem CPP-Projekt auch zusenden und ich schaue, ob es mit irgend einem Linker zu linken ist. Den Quelltext benötige ich dafür nicht. |
| | | | |
| | Detlef Jagolski | Hallo IF,
nochmal vielen Dank für Deine Hilfe. Ich werde erst einmal selber andere Linker Testen z.B. VC++ und PoLink. Nur ist es ärgerlich alles noch einmal Durchzuackern was jetzt schon läuft. Bisher habe ich große Projekte mit Delphi geschrieben. Möglicherweise bin ich schneller wenn ich den Teil mit Delphi neu schreibe. Vielleicht hat Sebastian noch eine Idee.
Gruß
Detlef |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 31.01.2010 ▲ |
| |
|
AntwortenThemenoptionen | 17.014 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |