Revision Counter in VS C++ 10.0



  • moin

    ich mal wieder 🙂
    gibt es irgend eine möglichkeit in einem programm eine variable hochzählen zu lassen wenn ich mein projekt durchkompiliere ?

    heist: ich ändere irgendwas an meiner software und sag im visual studio ich will mein projekt neu compilieren ... die software erhöht also die z.b. int variable um 1 und wenn ich dann mein programm starte will ich diese variable in irgend nem dialog anzeigen...

    kann man das irgendwie realisieren ?
    und wenn ja wie?

    mfg LT


  • Mod

    Ich mache das nur für Release Builds und verwende einen Custom-Build Step dazu.

    Ich habe dazu RCSTAMP genommen und etwas aufegbohrt:
    http://www.codeproject.com/KB/applications/rcstamp.aspx

    Es gibt auch makro Lösungen aber von denen halte ich nicht viel.
    Zudem man ja auch das Problem der Versionskontrolle hat.



  • moin martin

    sorry kannst du mir die benutzung erklären ?
    ich hab mir die sourcen zwar runter geladen und angesehen aber leider net ganz verstanden ...

    wenn ich das richtig seh benutzt das programm die main argumente um zu entscheiden ob ne neue version generiert wird ... gut die hab ich ja eher net da ich nen docview als main benutzt ... zumindestens hab ich noch nie ne main in meinem projekt gefunden ... (is von meinem chef programmiert worden vor 10 jahren... er wusste net mehr was er damals genommen hat, aber da ich ne view hab und sowas wie ne mainframe (heist nur anders) nehm ich mal an das es nen docview is)

    also muss ich es wohl in die startparameter direkt im vc++ eintragen ...
    also ich will halt immer erhöhen wenn ich compiliere ... und das am liebsten in ner variable verankern die ich dann im programm anzeigen kann ...

    mfg lt


  • Mod

    Die Versionsnummmer wird in der VS_VERSION_INFO verankert. das ist Dir klar?
    Also musst Du diese verändern, wenn ein Build läuft.

    Naja und die befehlszeile ergibt sich doch aus dem Artikel undsteht da drin:
    rcstamp myproject.rc2 ..*.+

    Wenn Du die Versionnummer in Deinem Programm brauchst musst die die VS_VERSDION_INFO auslesen... CModuleVersion von Paul DiLascia hilft Dir dabei!

    Ansonsten wie immer GiDF!



  • char szBuild[256];
    	CString m_Build;
    	if (GetModuleFileName(NULL,szBuild,sizeof(szBuild)-1)){
    		DWORD fvh;
    		DWORD fvlen = GetFileVersionInfoSize(szBuild,&fvh);
    		VOID *fv = NULL;
    		if (fvlen)
    			fv = malloc(fvlen);
    		if (fv != NULL){
    			if (GetFileVersionInfo(szBuild,fvh,fvlen,fv)){
    				UINT vblen;
    				VOID *vb;
    				VS_FIXEDFILEINFO *version= NULL;
    				if (VerQueryValue(fv, "\\", &vb, &vblen) )
    					version = (VS_FIXEDFILEINFO*)vb;
    				if (VerQueryValue(fv,"\\StringFileInfo\\040704B0\\ProductVersion",&vb,&vblen))
    					m_Build = ((char*)vb);
    CString version_str;
    version_str.Format("%i",version);
    AfxMessageBox(m_Build+"   "+version_str);
    			}
    		}
    		free(fv);
    	}
    

    also ich hab das hier gefunden und dort bekomm ich bei m_Build die version raus die ich im designer eintragen kann ...

    das problem is das ich bei der version ne 8 stellige zahl raus bekomm aber das die sich nicht erhöht wenn ich mein projekt durchcompiliere ..

    und das ist mir jetzt nicht ganz klar



  • ok so hab mich noch n bissi belesen ...

    also mein problem: also ich bekomm die versionsnummer raus aber da ich wie viele leute eben halt einfach f9 zum kompilieren drück wird diese nicht hochgezählt ...

    also brauch ich ne version die sagt das da wer was kompiliert hat und mir irgend nen define hochzählt ...

    und da komm ich mit deinem programm net klar @ martin ...


  • Mod

    Nochmal (ich schrieb es bereits): Füge enen Custom-Build-Step, dieser macht die Veränderungen und ruft dieses Programm auf...

    LordTerra schrieb:

    net klar @ martin ...

    Mit .Net habe ich ncihts am Hut...



  • moin

    net klar bedeutet : nicht klar ... sorry is hier normaler slang 😉

    wie fügt man einen "custom build step" ein ?
    und wenn ich das hab ruf ich dann in diesem step das programm mit den entsprechenden parametern auf und dadurch wird dann die versionsnummer hochgezählt undi ch kann sie mir über meine oben gepostete variante raus holen und anzeigen ?

    mfg LT



  • ok das wie hab ich glaube gefunden :

    projekt eigenschaften ganz unten :
    Benutzerdefinierter Buildschrit

    so dort hab ich folgendes eingetragen:

    Befehlszeile: RCStamp.exe Acs400.rc2=..*.+
    Beschreibung: Versionierungs - Step
    Ausgabe: --- Version erhöht ---
    Zusätzliche Abhängigkeiten: nichts
    Im Anschluss ausführen: nichts
    Vorher ausführen: build

    bei build bin ich mir net sicher weil ich eigentlich nur strg+f5 mache (starten ohne debuggen)... ist das so richtig?

    EDIT:
    Fehler 4 error MSB3073: Der Befehl "RCStamp.exe Acs400.rc2=..*.+
    :VCEnd" wurde mit dem Code 3 beendet. C:\Programme\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 183 6 AVS2_V7

    ^^ bekomm ich als fehlermeldung


  • Mod

    RCSTamp EXE muss in einem Executable Verzeichnis liegen, dass im VS auch eingetragen ist bei Executables.


Anmelden zum Antworten