Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Von Modulen geteilte Variable?

Discussion on Von Modulen geteilte Variable? within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,356
Von Modulen geteilte Variable?

Hai,
Ich hab mir c++ so ohne Buch oder sonstwas ein wenig angeignet, deshalb ist mein Coding-Stil (wahrscheinlich) recht miserabel..

Ich versuche zur Zeit eine Variable aus mehreren Modulen auszulesen/zu verändern. Klappt jedoch nicht so wie ich will. Ich lasse ein Modul eine Patternsuche machen. Das Ergebnis davon soll in eine Variable geschrieben werden, die von anderen Modulen aus erreichtbar ist.

Informationen vorab:
Quote:
Compiler: Borland C++
Entwicklungsumgebung: Embarcadero C++ Builder XE2
Beispiel-Projekt:
Quote:
FindPattern.cpp
FindPattern.h
Hack.cpp
Hack.h
Main.cpp
Main.h
Values.h
Aufbau des Values-Moduls:
Code:
namespace Values {
    DWORD Addresse1 = 0;
}
Erklärung:
Das Modul "Main" ruft im Modul "FindPattern" eine PatternSuch-Funktion auf. Diese Funktion schreibt das Ergebnis dann in die Variable "Addresse1" im "Values"-Modul. (Ich habs mit ner MessageBox getestet, das Ergebnis ist != 0)
Dann ruft das Modul "Main" im "Hack"-Modul eine Funktion auf, die wiederum auf die Variable "Addresse1" aus dem "Values"-Modul zugreift, sagt aber dann, dass "0" drinsteht.

c++ Builder gibt mir auch eine Warnung aus:
Quote:
[ILINK32 Warnung] Warning: Public Symbol 'Values::Addresse1' ist in Modul PROJEKT\WIN32\DEBUG\HACK.OBJ und PROJEKT\WIN32\DEBUG\MAIN.OBJ definiert
(Das "Main"-Modul includiert die 2 anderen Module).


Wie kann ich das jetzt so machen, dass die Variable für beide Module erreichbar ist (dass die die selbe Value teilen) ..?

Danke im Voraus!
Mi4uric3 is offline  
Old 08/31/2012, 14:20   #2
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
du musst die varaiable als extern makieren (also nur deklarieren) nur in einer datei nicht (in der definierst sie dann also).

also üblicherweise würdest du ein der Values.h stehen haben:
Code:
extern int value1;
extern char value2;
..
und in der Values.cpp:
Code:
int value1;
char value2;
..
nkkk is offline  
Thanks
1 User
Old 08/31/2012, 14:22   #3
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,356
Danke, das probier ich mal aus

#Edit:

Das funktioniert sogar, vielen Dank!
Jetzt bin ich dieses blöde Problem endlich los und beim Compilen kommen keine Warnungen mehr :)

Danke ^-^

Closerequest ist gestellt
Mi4uric3 is offline  
Old 08/31/2012, 15:01   #4
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Das klingt nach einem Designfehler deinerseits. Globale Variablen sollte man wenn möglich vermeiden.
Nightblizard is offline  
Old 08/31/2012, 15:06   #5
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,356
Quote:
Originally Posted by Nightblizard View Post
Das klingt nach einem Designfehler deinerseits. Globale Variablen sollte man wenn möglich vermeiden.
Warum?
Ich hab doch erklärt, worfür sie da sind (FindPattern).
Mi4uric3 is offline  
Old 08/31/2012, 16:35   #6
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Wenn dein FindPattern auf globale Variablen getrimmt wurde, dann ist da was falsch. Kann auch sein, dass ich deine Erklärung missverstehe.

Für mich klingt das einfach so, als wolltest du folgendes machen:
Code:
namespace Values //Warum du namespaces "Module" nennst, ist mir auch nicht so ganz klar
{
     adresse1 = 0;
}

namespace Hack
{
     void foo()
     {
          doSomething(Values::adresse1);
     }
}

namespace FindPattern
{
     void findPattern1()
     {
          Values::adresse1 = implFindPattern("\xB\x0\x0\xB\x5", 0, UINT_PTR(-1));
     }
}

namespace Main
{
     void foo()
     {
          FindPattern::findPattern1();
          Hack::foo();
     }
}

So kommt das für mich rüber und das ist einfach nur unschön und ganz und gar nicht flexibel.
Code:
namespace Hack
{
     void foo(UINT_PTR address)
     {
          doSomething(address);
     }
}

namespace FindPattern
{
     UINT_PTR findPattern(const std::string& pattern, UINT_PTR begin, UINT_PTR end)
     {
          //...
          return address;
     }
}

namespace Main
{
     void foo()
     {
          auto address = FindPattern::findPattern("\xB\x0\x0\xB\x5", 0, UINT_PTR(-1));
          Hack::foo(address);
     }
}
Das ist kürzer und sehr viel flexibler als das da oben und kommt ganz ohne globale Variablen aus.
Nightblizard is offline  
Old 08/31/2012, 17:18   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Mal so als Frage in den Raum geworfen, da ich da selbst etwas unsicher bin:

Wie siehts mit static aus? Würde das nicht ebenso den Zweck erfüllen? Ungeachtet der Tatsache, dass es schlechter Stil ist.
MrSm!th is offline  
Old 08/31/2012, 17:48   #8
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,356
Quote:
Originally Posted by Nightblizard View Post
Wenn dein FindPattern auf globale Variablen getrimmt wurde, dann ist da was falsch. Kann auch sein, dass ich deine Erklärung missverstehe.

Für mich klingt das einfach so, als wolltest du folgendes machen:
Code:
*Siehe Original-Post
So kommt das für mich rüber und das ist einfach nur unschön und ganz und gar nicht flexibel.
Code:
*Siehe Original-Post
Das ist kürzer und sehr viel flexibler als das da oben und kommt ganz ohne globale Variablen aus.
Ist nicht sonderlich praktisch, da ich dann jedes mal FindPattern aufrufen müsste, um wieder auf die Adresse zuzugreifen. Da such ich sie lieber nur 1x, speichere sie global und greif dann immer wieder darauf zu, ist wesentlich performanter.

Das mit den Namespaces mache ich, damit ich die Übersicht bewahre.
Mi4uric3 is offline  
Old 08/31/2012, 17:57   #9
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by MrSm!th View Post
Mal so als Frage in den Raum geworfen, da ich da selbst etwas unsicher bin:

Wie siehts mit static aus? Würde das nicht ebenso den Zweck erfüllen? Ungeachtet der Tatsache, dass es schlechter Stil ist.
Afaik sollte das funktionieren, durch die Speicherklasse "static" wird
der Speicher ja erst am Ende des Programms freigegeben, also sollte
es möglich sein darauf zuzugreifen.
(aber kann mir vorstellen das es da mal Probleme geben könnte,
besonders wenn man dann noch mehrere Threads verwendet)
.SkyneT. is offline  
Old 08/31/2012, 18:24   #10
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
also static bei globalen variablen bedeutet eigentlich das man nicht von anderen dateien darauf zugreifen kann (also eben nicht wie im beispiel oben mit extern), das globale variablen erst bei programmende freigegeben werden ist immer so, auch ohne static.

das es erst bei programmende freigegeben wird spielt nur bei static variablen innerhalb von funktion eine rolle.
nkkk is offline  
Old 08/31/2012, 18:27   #11
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Mit static begrenzt du die Sichtbarkeit einer globalen Variable auf ihr Modul. Enstpricht also nicht dem was der TS wollte.

EDIT: Ich werd zu alt und langsam..
xNopex is offline  
Old 08/31/2012, 19:25   #12
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by Mi4uric3 View Post
Ist nicht sonderlich praktisch, da ich dann jedes mal FindPattern aufrufen müsste, um wieder auf die Adresse zuzugreifen. Da such ich sie lieber nur 1x, speichere sie global und greif dann immer wieder darauf zu, ist wesentlich performanter.

Das mit den Namespaces mache ich, damit ich die Übersicht bewahre.
Ich denke was du suchst sind Klassen.

Du solltest uns zumindest grob sagen was du vor hast, damit man dir spezifische Tipps geben kann. Z.B. solltest du dir Behavior Trees anschauen (zumindest den Gedanken dahinter), falls du einen Bot programmieren möchtest.
Nightblizard is offline  
Old 08/31/2012, 19:29   #13
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,356
Quote:
Originally Posted by Nightblizard View Post
Ich denke was du suchst sind Klassen.

Du solltest uns zumindest grob sagen was du vor hast, damit man dir spezifische Tipps geben kann. Z.B. solltest du dir Behavior Trees anschauen (zumindest den Gedanken dahinter), falls du einen Bot programmieren möchtest.
Nun ja, ich hab doch gesagt, was ich mache.
Ich such ne Adresse, welche dann von anderen Funktionen in unterschiedlichen Modulen (für die ganz pingeligen, ich meine die .cpp Dateien) genutzt wird. Und das mit vielen Adressen.
Außerdem bin ich doch vollkommen zufrieden. Die 1. Antwort hat mir zu 100% geholfen, das war genau das, was ich wissen wollte.
Mi4uric3 is offline  
Closed Thread


Similar Threads Similar Threads
㋛ Kleines Problem mit meinen RAM Modulen!
08/25/2012 - Technical Support - 6 Replies
Hay zusammen, ich komm direkt zum Problem. Und zwar hab ich mir vor ca. vor 4 Tagen zwei neue RAM Module gekauft. Jeweils mit 2GB (= 4GB) DDR2 - 800mhz. Da ich Win7 Ultimate 32Bit System hab, musste ich erstmal die DDR Sperre entfernen. Hier mein Mainboard/CPU/Graka: - ASUS P5KPL-AM SE - Intel Core 2 Duo E4500 2.20GHz - AMD Radeon HD 6570
Frage zu CI - Modulen / TV
01/26/2012 - Technical Support - 2 Replies
Hi, ich wollte mal fragen, ob man mit den CI Modulen Sky / Bundesliga sehen kann... Mein Fernseher hat halt ein CI Modul und gibts da Möglichkeiten, außer gefühlte 300€ im jahr zu zahlen :D? Außerdem wollte ich fragen, wenn ich mir so ne HD+ Karte, ist egal welches Modul ich dafür benutze oder gibts da verschiedene? MfG
[S] Modulen hinzufüger [B] Admin Account
09/03/2011 - Browsergames - 0 Replies
Hey ich suche einen der mir module erstellen kann, denn in meinem psere vr fehlen folgende module: plündern, alliance und erfinderwerkstadt(wo man z.B hoplit schut gold oder silber loder bronze machen kann) biete nur einen admin account in meienm pserver, falls ihr es nicht umsonst machen werdet... eine gefallen würdet ihr mit doch machen :o! gebe kein geld.
Cost of accessing a casted variable vs. assigning the casted variable? (C#)
01/05/2011 - CO2 Programming - 5 Replies
I know that in unmanaged C++, casting is at compile-time, so it's better to avoid the assignment and simply access it for all instances. However, in C#, I have no idea since I'm pretty new to it.
Überprüfen ob Variable Eine Variable ist
10/16/2010 - AutoIt - 26 Replies
Hey leute ich wollte fragen ob/wie man überprüfen kann ob eine Variable eine Variable ist z.b. so $k = 1 $i = $k if $i = VARIABLE Then msgbox(0,'$i ist eine variable!!','') endif PS:Wp releast man nochma TuT (z.b. für metin2??)



All times are GMT +2. The time now is 20:27.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.