[c++]Datei Flash <---> C++

kickerxy123

Erfahrenes Mitglied
Hallo, ich bin es mal wieder :)
tut mir leid, dass ich immer soviele Fragen habe...:rolleyes:

also zu meinem aktuellen Problem:

Ich habe ein kleines Flash Spiel und das hat variablen, z.B. die x und y koordinaten, oder ob geschossen wird usw.
Diese Variablen möchte ich LOKAL im selben Verzeichnis in einer .txt oder was auch immer speichern.
So. Da Flash Internetoptimiert ist, meins aber eine offline Angelegenheit ist, sollte es (möglichst) auch offline realisierbar sein, zur letzten not aber auch mit php!

Optimal wäre es eben in c++ (habe gehört, dass das auch gehen soll ) :)

also:

Flash -->Variablen -->C++ -->.txt
wie man speichert in c++ weiß ich, nicht aber wie man die variablen aus flash IN cpp reinbekommt :?:

ich wusste jetzt auch nicht so ganz in welches Forum ich schreiben soll..
hoffe ihr könnt mir trotzdem helfen ;)

Danke,
eXo
 
Man berichtige mich, wenn ich falsch liege, aber Flash läuft im Browser, Browser haben aus gutem Grund keinen Zugriff auf den Rest vom System, weil sonst jede beliebige Webseite die man besucht einem die Festplatte auslesen könnte.
Darum ist es nicht ohne weiteres möglich aus einem Flash Programm heraus auf irgendetwas Anderes im PC zuzugreifen, weder schreiben auf die Platte, noch Datenaustausch mit anderen Anwendungen.

Um das zu ermöglichen musst du in der Registry einen Eintrag machen, der dem Browser erlaubt von einem bestimmten URL aus eine bestimmte C++.exe auszuführen.
Wie das geht findest du in Google unter "shell\open\command".
Am bequemsten geht das, wenn man die C++.exe in ein setup Programm, wie z.B. den Inno Setup Compiler verpackt, da kannst du die nötigen Registry Einträge gleich mit ins setup packen.

Hast du das fertig, kannst du aus dem Browser deine C++.exe direkt aufrufen und ihr als Parameter die Variablen übergeben, die sie speichern soll.
 
naja berichtigen wäre hart gesagt, aber Datenaustausch ist einseitig direkt möglich (einlesen) und schreiben indirekt auch (mit php gehts ganz sicher). Mit dem Sicherheitsaspekt ist mir bewusst, dass sollte mein "Internetoptimiert" u.a. aussagen ;)
2. Das Flash programm wird lokal ausgeführt (nicht über den Browser), läuft also OFFLINE. Daher muss ich nciht den Umweg gehen, den du mit dem regedit beschreibst.
ich habe dann z.B. eine start.exe die meine Flash.exe startet und meine cpp.exe .

Frage ist halt nur, inwiefern ich deinen letzten Satz realisieren kann
"...und ihr als Parameter die Variablen übergeben, die sie speichern soll"
genau das ist mein problem :(
oder hab ich was falsch verstanden?
Auf jeden Fall danke für deineschnelle Antwort!
lg
 
Ich sag mal ganz vorsichtig WENNNNNNNN ......

deine Flash.exe in der Lage ist Daten mit anderen Anwendungen auszutauschen, dann kann sie auch Anwendungen starten.
Wenn sie das kann, dann brauchst du nur aufrufen:

Name.exe parameter

Die Anwendung findet ihre Parameter dann in args[] oder mit GetCommandLine()
 
hm scheint nicht zu gehen (Flash kann anwendungen starten, scheinbar aber keine parameter übergeben... wenn mich nciht alles täuscht), aber trotzdem hast du mich auf eine *hust* fabelhafte *\hust*
Idee gebracht: ich will ja Zahlen übergeben. D.h. ich mache 10 BATs (0-9), jede Bat schreibt eine unterschiedliche Zahl in eine txt.
d.h. wenn ich z.B. in Flash die 4.bat starte, schreibt die bat eine 4 in die .txt :)
wie ich auf so einen unschönen Müll gekommen bin weiß ich auch nciht^^, sollte allerdings funktionieren.

Wenn noch einer eine bessere Idee hat, bitte posten :D danke

ps: da das ganze ja in einem Zyklus von 20millisekunden gemacht werden muss und ca. 20Zahlen übergeben werden (also auch 20bat aufrufe alle 20ms), überlege ich grade, wie es da mit der Performance aussieht.. Kann mir da einer eine Einschätzung geben?
lg
eXo
 
1 Programmaufruf pro Millisekunde schaffst selbst der beste Rechenr nicht, allein der Zugriff auf die Platte um die Datei zum lesen zu öffnen braucht ja schon ca 10ms, dann lesen, ausführen, nochmal auf die Platte zugreifen um die .txt zu schreiben, ich denke eher du wirst auch einen Aufruf pro 20ms nicht hin bekommen, ausser du erlaubst mehrfache Instanzen der Anwendung, was dann aber bedeutet, dass die sich gegenseitig ins Gehege kommen, wenn die gleichzeitig die gleiche Datei schreiben wollen.
Lies mal die Systemzeit in ms aus, bevor du aus Flash raus die Anwendung startest, und dann nochmal im WM_DESTROY am Ende der Anwendung, dann hast du einen Anhaltspunkt, wie lange ein Durchlauf dauert.

Wenn Flash deine .exe ausführen kann, aber keine Parameter annimmt, dann versuchs mal ohne Leerstelle:

Name.exe?parameter

Im Programm dann aus GetCommandLine() den substring ab ? ziehen.
 
hm also atm geht bei mir der aufruf in flash gar nicht, auch keine normale .exe ohne parameter, trotz zahlreicher tipps dazu, z.B. den Ordner fscommand anzulegen usw...
daher kann ich das grade nciht ausprobieren...
aber ich habe noch was besseres:
Socket Verbindung
also in Flash hab ich n Socket (der geht) und der kann auch mit einem anderen Flash Socket reden (geht auch!)
nur: wenn ich einen Flash Client mit einem c++ Socket reden lasse, dann erkennt der c++ Server das auch, empfängt auch nachrichten ohne Probleme, kann aber (scheinbar) keine Nachrichten an den Flash Clienten zurückgeben
(mit einem c++ clienten geht das aber auch)
d..h. es geht:
Flash Client -->c++ Server -->c++ Client
aber nicht:
Flash Client -->c++ Server -->Flash Client

habt ihr ne Idee ?
oder soll ich lieber ins Flash Forum posten?
Ich meine, ich könnte an der Stelle dann aus c++ Client in ne .txt schreiben und diese dann in FLash einlesen, das sollte gehen, aber wäre dann auch alle 20ms immernoch einmal schreiben und einmal lesen

was meint ihr?

lg
eXo und danke für deine Mühen Thomasio

ps: liegt es an dein Parametern, die in c++ gesendet, nciht aber in Flash ausgewertet werden?
Code:
send(connectedSocket,"Nachricht",strlen("Nachricht"),0)
 
Zuletzt bearbeitet:
Einem Socket ist es völlig egal, was für ein Programm dahinter steckt, ob Flash oder C++ oder Visual Basic, die Syntax ist vielleicht ein wenig anders, aber Socket ist Socket und kann miteinander reden, solange keine Firewall dazwischen den Zugriff verweigert.
Natürlich muss eins der beiden Enden die Verbindung aufbauen und das andere Ende die Verbindung akzeptieren, beide aufbauen und keiner akzeptieren geht nicht, einfach was senden ohne Verbindung aufbauen geht auch nicht.
Kurz gesagt, du musst der C++.exe einen Server Socket einbauen, der auf eingehende Verbindungen wartet, und im Flash Client auf deine eigene IP, bzw. 127.0.0.1 oder localhost connecten.
 
Das hätte ich jetzt fast überlesen ......

Wieso willst du mit C++.exe ne txt schreiben, die Flash.exe dann lesen soll, wenn die Daten die da drin stehen vorher aus der Flash.exe kommen?
Wozu überhaupt alle 20ms in ne Datei schreiben?

WENN Flash.exe die Zahlen zuerst an C++.exe sendet, dann sind sie doch innerhalb von Flash.exe vorhanden und müssen nicht über senden an C++.exe in ne txt geschrieben werden, die Flash.exe dann wieder lesen kann.
WENN Flash.exe eine .txt lesen kann, dann kann er sie auch schreiben, und braucht nicht den Umweg über C++.exe (ich schätze das kann Flash genausowenig wie Programme ausführen).
WENN C++.exe ne Datei schreiben soll, die alle 20ms mit neuen Werten überschrieben werden soll, aber von Flash.exe überhaupt nicht benötigt werden, wozu dann überhaupt die Datei schreiben? Falls du die Zahlen als backup brauchst um bei Programmabbruch den letzten Stand wieder herzustellen, dann reicht es die Datei EINMAL zu schreiben, nämlich nach Programmabbruch.

Ganz anderer Gedanke .....
Wenn das im Browser läuft, auch offline, warum liest und schreibst du deine Zahlen nicht einfach in ein Cookie? Das sollte Flash alleine können, ganz ohne C++.exe.
 
Zurück