64Bit und 32Bit
-
Hallo ihr Gurus
Ich arbeite mit dem c++Builder 2009 und habe mal eine eher allgemeine Frage zu 32 und 64bit.
zb. ich habe ne 32bit umgebung und meine Software läuft auf 32 bit vista rechner problemlos.
auf 64bit läuft sie fehlerhaft: ""kein integer wert meldungen usw.
Nun zur Eigentlichen Frage: Um zb meine Software Lauffähig zu machen auf einem 64bit Vista müsste ich die Anwendung speziell 64Bit Compilieren oder muss lediglich der ProgrammCode 64Bit Tauglich gemacht werden?
Ich versteh dieses ganze Prinzip irgenwie noch nicht so ganz.
Bzw kennt ihr Links wo man sehen kann was man bei der Programmierung für 64bit beachten muss? Unterschiede zu 32bit usw?
Danke im vorraus
-
Blue23 0 schrieb:
auf 64bit läuft sie fehlerhaft: ""kein integer wert meldungen usw.
Das hat vermutlich nicht allzu viel mit 64 Bit zu tun, eher mit den Regional- und Spracheinstellungen. Wenn es Gleitkomma- und nicht Integerwerte wären, würde ich z.B. darauf tippen, daß du dich irgendwo auf den Dezimalzahlen-Separatoren ',' verläßt und nicht in Betracht ziehst, daß es je nach Systemkonfiguration auch '.' sein könnte.
Um Fehler zu finden, die nur auf anderen Systemen in Erscheinung treten, eignet sich am besten der Remote-Debugger.
Blue23 0 schrieb:
Nun zur Eigentlichen Frage: Um zb meine Software Lauffähig zu machen auf einem 64bit Vista müsste ich die Anwendung speziell 64Bit Compilieren oder muss lediglich der ProgrammCode 64Bit Tauglich gemacht werden?
Weder noch; gewöhnlich läuft sie ohne Änderungen. Nur wenn du die Vorteile von 64-Bit nutzen willst (breitere Register, mehr Register, größerer Addreßraum), mußt du dein Programm entsprechend neucompilieren.
-
Vielen Dank für die Antwort.
Den letzten Part hab ich erhofft
Ich werd mich dann mal auf Fehlersuche begeben und hoffe das ich diese Fehler finden und beseitigen kann.
Remote-Debugger ?? Also Debugger ist klar. aber Remote - kann man den irgendwo herbekommen?
-
Bin leider doch etwas überfragt.
Hab mir die Stelle mal angeschaut wo der besagte Fehler auftritt und ich kann da einfach nichts finden.
In den Entsprechendem Quelltext wird ausschliesslich mit AnsiStrings und int gearbeitet. kein double float oder Datums werten.Versteh das deshalb nicht ganz.
-
audacia schrieb:
Weder noch; gewöhnlich läuft sie ohne Änderungen. Nur wenn du die Vorteile von 64-Bit nutzen willst (breitere Register, mehr Register, größerer Addreßraum), mußt du dein Programm entsprechend neucompilieren.
Weswegen genau laufen dann viele Programme (jetzt nicht selbstgeschriebene) auf 64bit nicht? Würd ich gern mal wissen, da ich auch 64bit benutze (und jetzt bitte keine "wieso das denn?"-Fragen) und ich meine Lieblingsfirewall nicht mehr nutzen kann.
Grüße
-
Hallo
Die Fehlermeldung deutet eher auf eine mißlungene Konvertierung von AnsiString zu int hin (zum Beispiel bei StrToInt("a") ). Mit 32/64 bit dürfte das nichts zu tun haben. Überprüf doch mal durch spezielle Ausgabe (MessageBox) entsprechende AnsiString-Werte vor StrToInt.
Remote-Debugging ist eine Fähigkeit einer Entwicklungsumgebung, ein Programm zu debuggen das auf einem anderem Rechner läuft. Die entsprechenden Informationen werden vom Host-Rechner an den Debuggrechner per Netzwerk gesendet.
bis bald
akari
-
Also StrToInt wird tatsächlich oft benutzt.
Ich werd auf jedenfall weitersuchen. bis die Fehlerquellen gefunden sind. Danke an alle. Werde erfolge natürlich mit Beschreibung posten.
Das mit den Messages ist ne gute idee. Werd erstmal genau suchen an welcher stelle er genau hängt.
Bis dann
-
Hallo
halloei schrieb:
audacia schrieb:
Weder noch; gewöhnlich läuft sie ohne Änderungen. Nur wenn du die Vorteile von 64-Bit nutzen willst (breitere Register, mehr Register, größerer Addreßraum), mußt du dein Programm entsprechend neucompilieren.
Weswegen genau laufen dann viele Programme (jetzt nicht selbstgeschriebene) auf 64bit nicht? Würd ich gern mal wissen, da ich auch 64bit benutze (und jetzt bitte keine "wieso das denn?"-Fragen) und ich meine Lieblingsfirewall nicht mehr nutzen kann.
GrüßeDas liegt entweder an generell schlecht geschriebenen Programmen (die immer davon ausgehen das ints 4 Byte haben, und dann überrascht sind wenn sie von außerhalb mit 8 Byte-ints konfrontiert werden). Oder an prinzipieller Unverträglichkeit, was besonders bei Systemnahen Programmen der Fall sein kann.
Und manche Programme fragen auch einfach nur Windows nach Typ ab, und verweigern jeden Dienst auf Windowsversionen die ihnen unbekannt sind.bis bald
akari
-
blue23 0 schrieb:
Remote-Debugger ?? Also Debugger ist klar. aber Remote - kann man den irgendwo herbekommen?
Der ist auf deiner Installations-DVD als separates Setup enthalten.
halloei schrieb:
Weswegen genau laufen dann viele Programme (jetzt nicht selbstgeschriebene) auf 64bit nicht?
Weil sie ins System eingreifen. Beispielhafte Fälle wären etwa Shell-Extensions (diese müssen als DLL in explorer.exe geladen werden, was nicht geht, wenn explorer.exe ein 64-Bit- und die Shell-Extension ein 32-Bit-Modul ist), Firewalls (da sie mit gewöhnlich recht unsauberen Mitteln systemweite Hooks installieren) oder Treiber.
-
So Problem gefunden.
Mein Programm liest gewisse Werte aus der Win Registry aus. unter anderem auch aus HKLM\SOFTWARE\Microsoft\ usw.
aber auf einem 64bit Windows werden diese werte bei einem 32bit umgelenkt in einen anderen Zweig und dort war ein gewisser Wert nicht vorhanden und lass quasi nix aus. und nix ist kein Integer Wert
Es hat nich jemand zufällig ein funktionierendes Beispiel wie ich mit hilfe der WinApi die Windows Version - + Service Packs auslesen kann parat ?
Also msdn dort hab ich alles gefunden jedoch bekomm ich diese Beispiele hier in meinem vcl Projekt nicht zum laufen.
Wahrscheinlich weil ich noch zu wenig weiss.Deshalb die Frage ob jemand ein anderes Beispiel hat: Vieleicht versteh ich das besser.
-
Blue23 0 schrieb:
Mein Programm liest gewisse Werte aus der Win Registry aus. unter anderem auch aus HKLM\SOFTWARE\Microsoft\ usw.
Was liest du denn genau aus?
-
Hallo
Für das Auslesen der Windows-Version gibt es spezielle WinAPI-Funktionen. Dazu sollte es nicht nötig sein in der Registry zu arbeiten. Denn die WinAPI-Funktionen sind dann Versionsübergreifend. Näheres findest du im WinAPI-Forum.
bis bald
akari
-
Was liest du denn genau aus?
HKLM\Software\Microsoft\Windows NT\CurrentVersion
Dort zb. CurrentBuild , und CSDVersion usw.
aber bei 64bit lande ich nicht dort sondern woanders weils umgelenkt wird für den 32bit bereich.Für das Auslesen der Windows-Version gibt es spezielle WinAPI-Funktionen
Weis ich - hatte ich ja schon geschrieben. Ich habe auch ausführlich die MSDN und das WinApi Forum durchsucht. Im Forum wird immer nur auf das Beispiel von der MSDN gezeigt nur ich komme mit diesem Beispiel nicht klar.
Deshalb fragte ich ob jemand ein anderes Beispiel kennt. Die Funktionen werden logischerweise die gleichen sein. Aber Quelltext ist nicht gleich Quelltext. Vieleicht versteh ich es dort besser. Das Beispiel kann sich ja auch erstmal nur auf eine Sache beziehen. Also nicht gleich alle Daten auslesen sondern nur die Buildnr. zb. ist dann einfacher zu verstehen.Ich wills ja lernen -- echt. Also will nix geschenkt
PS bitte nicht wieder die Links zur MSDN die habe ich ausführlich getestet und ich versteh es nur leider nicht da das für einen Anfänger wirklich schwer ist.
-
Hallo
Hier in diesem Beispiel findest du alles nötige um GetVersionEx anzuwenden.
Ich habe nicht umsonst aufs WinAPI-Forum verwiesen. Weitere Nachfragen zu GetVersionEx oder ähnlichem bitte in einem neuem Thread im WinAPI-Forum (und vorher bitte Suche dort benutzen!)bis bald
akari
-
Hi,
hier stehen einige Builds:
http://www.winfaq.de/faq_html/Content/tip0500/onlinefaq.php?h=tip0637.htm
Kurzcode:
void __fastcall TForm1::Button1Click(TObject *Sender) { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx( &osvi ); DWORD MajorVersion = osvi.dwMajorVersion; DWORD MinorVersion = osvi.dwMinorVersion; DWORD BuildNumber = osvi.dwBuildNumber; DWORD PlatformId = osvi.dwPlatformId; wchar_t CSDVersion = osvi.szCSDVersion[ 128 ]; } //---------------------------------------------------------------------------
mfg
kpeter
-
Vielen Dank - ist gut verständlich. Darauf kann ich weiter aufbauen.
Ja ich weis falsches Forum aber das war hier so ein fliessender übergang von einem thema ins andere. In der Regel mach ich das immer ins richtige Forum.
Aber in der Regel haben die Römer rote Bärte
Trotzdem Danke an alle ..... tolles Forum und weiter so.