Επισκέπτης Δημοσ. 4 Απριλίου 2013 Δημοσ. 4 Απριλίου 2013 Καλησπέρα Στο Φόρουμ... Προσπαθώ να φτιάξω ενα πρόγραμμα σε VB 10 , με το οποίο θα κάνω αλλαγές σε ενα source code αρχείο ".cpp", και μετα να το κανει compile σε .exe... υπαρχεί καποιος τρόπος να το κανω σε VB ?? ή Να χρησιμοποιήσω καποιο άλλο compiler... αν ναι , πιο? σας ευχαριστώ πολύ
migf1 Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 Καλησπέρα Στο Φόρουμ... Προσπαθώ να φτιάξω ενα πρόγραμμα σε VB 10 , με το οποίο θα κάνω αλλαγές σε ενα source code αρχείο ".cpp", και μετα να το κανει compile σε .exe... υπαρχεί καποιος τρόπος να το κανω σε VB ?? ή Να χρησιμοποιήσω καποιο άλλο compiler... αν ναι , πιο? σας ευχαριστώ πολύ Εννοείς να φορτώσεις στη μνήμη ένα αρχείο .cpp, να του κάνεις προγραμματιστικά αλλαγές, και κατόπιν πάλι προγραμματιστικά να καλέσεις έναν ήδη εγκατεστημένο C++ compiler και να του περάσεις σαν argument το αλλαγμένο .cpp? Αν ναι, δεν είναι κάτι ιδιαίτερα δύσκολο σε καμία από τις δημοφιλείς γλώσσες (και σε πολλές μη δημοφιλείς). Μόνο που για VB10 κώδικα δεν μπορώ να σε βοηθήσω εγώ, ελπίζω να σε κατατοπίσει άλλο παιδί. Αν εννοείς κάτι άλλο, διευκρίνισε το λίγο καλύτερα.
Επισκέπτης Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 Εννοείς να φορτώσεις στη μνήμη ένα αρχείο .cpp, να του κάνεις προγραμματιστικά αλλαγές, και κατόπιν πάλι προγραμματιστικά να καλέσεις έναν ήδη εγκατεστημένο C++ compiler και να του περάσεις σαν argument το αλλαγμένο .cpp? Αν ναι, δεν είναι κάτι ιδιαίτερα δύσκολο σε καμία από τις δημοφιλείς γλώσσες (και σε πολλές μη δημοφιλείς). Μόνο που για VB10 κώδικα δεν μπορώ να σε βοηθήσω εγώ, ελπίζω να σε κατατοπίσει άλλο παιδί. Αν εννοείς κάτι άλλο, διευκρίνισε το λίγο καλύτερα. Ακριβώς... Βασικά το θέμα ειναι πως το εχω ηδη κανει κατι σχετικο... αλλα το προβλημα πως πρεπει μαζι με το προγραμμα μου να "κουβαλαω" και τον compiler (minigw32), μαζι με τα libraries και τα σχετικα... με αποτελεσμα να πιανει πολυ χωρο... γιαυτο ψαχνω κατι πιο γρηγορο και ελαφρυ? αν υπαρχει...
pmav99 Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 Είναι όντως τόσο performance critical αυτό που θέλεις να κάνεις ώστε να χρειάζεσαι απαραιτήτως τη C και μάλιστα με αλλαγές και "compilation on-the-fly"? Γιατί αν δεν είναι θα μπορούσες να το κάνεςι όλο απευθείας σε VB πχ για να μην μπλέκεις. Επίσης είναι κάτι που θα το κάνεις bundle και θα το δώσεις σε άλλους? Γράψε λίγο πιο αναλυτικά τι θες να κάνεις, μήπως υπάρχει καλύτερη λύση. Αυτό που ρωτάς, όπως είπε και ο migf1, είναι πολύ απλό σε οποιαδήποτε γλώσσα προγραμματισμού 1. διαβάζεις το αρχείο 3. κάνεις τις αλλαγές 3. γράφεις το αρχειο στο δίσκο 4. καλείς τον compiler. Αν το πρόβλημα είναι το μέγεθος του gcc και των βιβλιοθηκών, η γλώσσα που θα χρησιμοποιήσεις για την επεξεργασία του αρχείου δε θα σε βοηθήσει σε τίποτα.
migf1 Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 Ακριβώς... Βασικά το θέμα ειναι πως το εχω ηδη κανει κατι σχετικο... αλλα το προβλημα πως πρεπει μαζι με το προγραμμα μου να "κουβαλαω" και τον compiler (minigw32), μαζι με τα libraries και τα σχετικα... με αποτελεσμα να πιανει πολυ χωρο... γιαυτο ψαχνω κατι πιο γρηγορο και ελαφρυ? αν υπαρχει... Δοκίμασε την Turbo C++ 3.0. Λογικά θα είναι πιο ελαφριά και γρήγορη από το mingw tool-chain. Αν σου κάνει, θα χρειαστεί να εξοικειωθείς και με την γραμμή εντολών της, για να μπορέσεις να περάσεις τα κατάλληλα options του compiler όταν τον καλέσεις προγραμματιστικά με παράμετρο το διορθωμένο .cpp αρχείο σου. Όσο για την VB10, ένα πρόχειρο googling μου έβγαλε πρώτο αυτό: http://stackoverflow.com/questions/2450426/run-command-in-vb-net
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Λοιπόν, κατέβασα την Turbo C/C++ από το παραπάνω link, την έστησα και το δοκίμασα σε Windows XP. Αντί για VB10 το δοκίμασα με C και όλα ok. Έφτιαξα δηλαδή ένα TEST.EXE πρόγραμμα σε C (πηγαίο: TEST.C) μέσα στο οποίο κάλεσα την Turbo C++ με παράμετρο ένα HELLO.CPP πηγαίο αρχείο, και κατόπιν έτρεξα το παραγόμενο HELLO.EXE (πάλι προγραμματιστικά). Όλη η Turbo C/C++ ξεζιπαρισμένη είναι μόλις 8Mb (περίπου) αλλά προφανώς δεν υποστηρίζει κανένα από τα σύγχρονα στάνταρ (π.χ. δεν είδα να υποστηρίζει namespaces)... HELLO.CPP #include <iostream.h> //using namespace std; void main() { cout << "Γειά σου κόσμε" << endl; cout << "Press any key to continue..."; cin.get(); } TEST.C#include <stdio.h> #include <stdlib.h> int main( void ) { puts( "--- calling: tcc -eHELLO.EXE -P HELLO.CPP...\n" ); system( "tcc -eHELLO.EXE -P HELLO.CPP" ); puts( "--- running: HELLO.EXE...\n" ); system( "HELLO.EXE" ); return 0; } Έξοδος του TEST.EXE--- calling: tcc -eHELLO.EXE -P HELLO.CPP... Turbo C++ Version 3.00 Copyright (c) 1992 Borland International hello.cpp: Turbo Link Version 5.0 Copyright (c) 1992 Borland International Available memory 3967604 --- running: HELLO.EXE... Γειά σου κόσμε Press any key to continue... ΥΓ. Όταν στήσεις την Turbo C/C++, βάλε τον BIN φάκελό της στο PATH των Windows, κι επιβεβαίωσε πως οι φάκελοι για τα INCLUDE και τα LIB αναγράφονται σωστά μέσα στο αρχείο: BIN\TURBOC.CFG
defacer Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Υπάρχει σίγουρα καλύτερη λύση για να πετύχεις το σκοπό σου, αλλά δε μπορούμε να την προτείνουμε γιατί δε μας τον έχεις πει. What is the XY problem?
Επισκέπτης Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Δοκίμασε την Turbo C++ 3.0. Λογικά θα είναι πιο ελαφριά και γρήγορη από το mingw tool-chain. Αν σου κάνει, θα χρειαστεί να εξοικειωθείς και με την γραμμή εντολών της, για να μπορέσεις να περάσεις τα κατάλληλα options του compiler όταν τον καλέσεις προγραμματιστικά με παράμετρο το διορθωμένο .cpp αρχείο σου. Όσο για την VB10, ένα πρόχειρο googling μου έβγαλε πρώτο αυτό: http://stackoverflow.com/questions/2450426/run-command-in-vb-net Απο χτές παιδευομαι και δεν εχω κανει τιποτα... απο οτι εψαξα στο ιντερνετ δεν υποστιριζετε απο τα windows /xp/vista/7?? σωστα? μονο σε dosbox το λειτουργησα.... Υπάρχει σίγουρα καλύτερη λύση για να πετύχεις το σκοπό σου, αλλά δε μπορούμε να την προτείνουμε γιατί δε μας τον έχεις πει. What is the XY problem? σωστος... Λοιπον Θα επανπροσδιορησω το θεμα μου... Φτιαχνω ενα προγραμμα σε VB , στο οποιο θα χρειαστω ενα αλλο προγραμμα γραμενο σε c++ , στο οποιο προγραμμα εγω εχω το source code , αλλαζω καποιες γραμμες και το κανω compile. τα εχω καταφερει, εχω φτιαξει το προγραμμα και δουλευει σωστα.. εχω το minigw32 σαν compiler ΑΛΛΑ το θέμα ειναι πως χρειαζετε να τον "Κουβαλαω" μαζι με το προγραμμα.... και ετσι ενω το προγραμμα ειναι 3 mb μαζι με το compiler παει στα 40mb... αυτο που ψαχνω με λιγα λογια ειναι καποιος μικροτερος compiler ή πως να μειωσω το μεγεθος το τωρινου compiler διαγραφοντας περιτες library και τα σχετικα... Δέν ξερω απο c++ και δεν μπορω να κατανοησω τι χρειαζετε και τι οχι
albNik Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Γιατι δεν προσαμόζεις το c++ πρόγραμμα ώστε αναλογα με τι παράμετρο το καλείς να κάνει την αντίστοιχη λειτουργία. Ετσι δεν χρειάζεται να το ξανακάνεις compile. Δε νομίζω να σου είναι πιο εύκολο να παράγεις c++ κώδικα κατά το runtime.
Επισκέπτης Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Γιατι δεν προσαμόζεις το c++ πρόγραμμα ώστε αναλογα με τι παράμετρο το καλείς να κάνει την αντίστοιχη λειτουργία. Ετσι δεν χρειάζεται να το ξανακάνεις compile. Δε νομίζω να σου είναι πιο εύκολο να παράγεις c++ κώδικα κατά το runtime. δέν ξερω c++ οριστε ενα κομματι του κωδικα: συνολικα ειναι 1000 γραμμες και αλλαζουν μονο αυτα που εχω σημειωσει #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <vector> #include <sstream> #include <fstream> #ifdef _WIN32 || _WIN64 #include <windows.h> #include <conio.h> #define mkfolder(dirname) CreateDirectoryA(dirname, NULL) #else #ifdef __linux__ //untested #include <sys/types.h> #include <sys/stat.h> #include <termios.h> #include <unistd.h> #define mkfolder(dirname) mkdir(dirname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) int getch(void) { struct termios oldt, newt; int ch; tcgetattr( STDIN_FILENO, &oldt ); newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newt ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); return ch; } #else #error "THIS OS NOT SUPPORTED YET!" #endif #endif #define FourCC 0x5A4F434D #define ItemFourCC 0x5850494D #define MobFourCC 0x5450494D #define IndexHeader 0x444B5045 #define IndexVersion 2 #define IndexBlockSize 0xC0 #define delta -1640531527 //-0x61C88647 #define LZO_E_OK 1 #define LZO_E_INPUT_OVERRUN (-1) #define LZO_E_EOF_NOT_FOUND (-2) #define LZO_E_INPUT_NOT_CONSUMED (-3) #define IndexName ".eix" <----- Αλλαζω αυτο #define DataName ".epk" <----- Αλλαζω αυτο int crashi = 0; unsigned char IndexXTEA[] = {0xB9, 0x9E, 0xB0, 0x02, 0x6F, 0x69, 0x81, 0x05, 0x63, 0x98, 0x9B, 0x28, 0x79, 0x18, 0x1A, 0x00,}; ^^^^Αλλαζω αυτο unsigned char DataXTEA[] = {0x22, 0xB8, 0xB4, 0x04, 0x64, 0xB2, 0x6E, 0x1F, 0xAE, 0xEA, 0x18, 0x00, 0xA6, 0xF6, 0xFB, 0x1C,}; ^^^^Αλλαζω αυτο
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Απο χτές παιδευομαι και δεν εχω κανει τιποτα... απο οτι εψαξα στο ιντερνετ δεν υποστιριζετε απο τα windows /xp/vista/7?? σωστα? μονο σε dosbox το λειτουργησα.... ... Όχι, κανονικά σε Windows XP το έστησα και το λειτούργησα. Χωρίς dosbox χωρίς τίποτα. Στο link που σου έδωσα είχε κι ένα link που εξηγούσε πως να το κάνεις install (εγώ απλώς το εγκατέστησα σε διαφορετική διαδρομή και μετά πήγα και πείραξα τις σχετικές ρυθμίσεις του IDE και μετά και το αρχείο TURBOC.CFG, γιατί το IDE μου έθετε κάτι περιορισμούς). Άσχετα με το παραπάνω, μιλάμε για compiler του 1992 (με πολλές ελλείψεις αλλά και περιορισμούς) , οπότε έτσι κι αλλιώς πιθανότατα δεν σου κάνει για την δουλειά που το θέλεις. Απλώς στο ανέφερα να το δοκιμάσεις αφενός γιατί δεν είχες παραθέσει ακόμα τι είδους κώδικα C++ είχες (βέβαια αυτό που παρέθεσες περισσότερο C είναι παρά C++) κι αφετέρου επειδή ζήτησες κάτι ελαφρύ. Πάντως, αν κι ακόμα δεν έχω καταλάβει τι ακριβώς προσπαθείς να κάνεις, αν μιλάμε για πρόγραμμα που σκοπεύεις να διοχετεύσεις στο δίκτυο για χρήση κι από άλλους, εγώ θα σκεφτόμουν και την εξής εναλλακτική: Να προσθέσω στα settings του προγράμματός μου ρυθμίσεις για C++ compilation, π.χ. μεταβλητές περιβάλλοντος, διαδρομές για τα εκτελέσιμα (compiler, linker, driver, κλπ), για τις βιβλιοθήκες, για τα includes, κλπ, καθώς κι ένα πεδίο για έξτρα command line flags και θα ρώταγα από τον χρήστη να τα συμπληρώσει, σύμφωνα με τον οποιοδήποτε C++ compiler έχει εγκατεστημένο στο σύστημά του. Ιδανικά θα παρείχα και κάποια έτοιμα προφιλ για δημοφιλείς compilers (π.χ. gcc/mingw, VisualC++) τα οποία θα ζητούσαν σαφλως λιγότερες πληροφορίες από τον χρήστη (π.χ. διαδρομές φακέλων μόνο) και δεν θα συμπεριελάμβανα στο πακέτο διάθεσης κάποιον C++ compiler. Όλα αυτά αν έχω όντως καταλάβει τι θέλεις να κάνεις, κάτι για το οποίο όμως δεν είμαι καθόλου σίγουρος
Επισκέπτης Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 σκεφτηκα να κανω αυτο: θα προσθέσω στον παραπανω κωδικο αυτο: http://www.cplusplus.com/reference/string/string/getline/ θα κανω μια φορα compile το προγραμμα και καθε φορα που θα το χρειαζομαι απλα θα αλλαζω τις ρυθμισεις σε ενα αρχείο τχτ
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Μπορείς να μας εξηγήσεις με απλά λόγια τι είναι αυτό που προσπαθείς να φτιάξεις; Για ποιο λόγο θες να καλέσεις προγραμματιστικά έναν C++ compiler και να τρέξεις και το εκτελέσιμο που θα παράξει; Φτιαχνεις IDE για παράδειγμα; Τι θα κάνεις αν το compilation γίνει fail? Χρειάζεσαι ή όχι το αποτέλεσμα που θα παράξει το compiled εκτελέσιμο όταν το τρέξεις κι αυτό προγραμματιστικά; κλπ, κλπ.
Επισκέπτης Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Μπορείς να μας εξηγήσεις με απλά λόγια τι είναι αυτό που προσπαθείς να φτιάξεις; Για ποιο λόγο θες να καλέσεις προγραμματιστικά έναν C++ compiler και να τρέξεις και το εκτελέσιμο που θα παράξει; Φτιαχνεις IDE για παράδειγμα; Τι θα κάνεις αν το compilation γίνει fail? Χρειάζεσαι ή όχι το αποτέλεσμα που θα παράξει το compiled εκτελέσιμο όταν το τρέξεις κι αυτό προγραμματιστικά; κλπ, κλπ. ειναι λιγο περιπλοκο... το προγραμμα σε c++ ειναι ενας xtea encrypter-decrypter και lzo-packer/unpacker οριστε ο κωδικας: http://pastebin.com/zmApcd8w λειτουργείες unpack: unpack|pack_name|out_folder|out_dat_name pack: pack|pack_name [tab]file_name|file_path|file_type comment: start line whith "--" Read_In_File : .dat files πχ. αν θες να κανεις pack εναν φακελο γραφεις σε ενα αρχειο .dat pack|folder location [ tab ]file_location_in_folder|File_location_in_pc|type folder location = ειναι η διαδρομη του φακελου απο κατω πρεπει να γραφτουν ολα τα αρχεια του φακελου αρχικα ενα TAB "chr(9)" file_location_in_folder= η διαδρομη του αρχειου μεσα στον φακελο... + | File_location_in_pc = η διαδρομη του αρχειου στον υπολογιστη... + | type = τυπος συμπιεσης 0=ουτε συμπιεση ουτε κωδικοποιηση 1 = συμπιεση 2= και τα 2 πχ εχουμε ενα φακελο στο c:\ με το ονομα "Pack" μεσα εχουμε ενα αρχείο "text.txt"και εναν φακελο "pack1" που μεσα του εχει ενα αρχείο "text2.txt" pack|C:\Pack\ text.txt|c:\pack\text.txt|2 pack1\text2.txt|c:\pack\pack1\text2.txt|2 μετα σερνουμε το αρχειο .dat στο προγραμμα και θα εμφανιστουν 2 αρχεία pack.eix και pack.epk δηλαδη το ονομα του φακελου και το extension που αλλαζουμε απο το source code... εδω χρειαζομουνα να κανω συχνα compile για την αλλαγη του extension οπως επισης και inde_xtea key package_xtea key και για unpacking unpack|pack_name|out_folder|out_dat_name πχ εχουμε στον φακελο c:\pack\ 2 αρχεία (eikones.eix,eikones.epk) γραφουμε unpack|c:\pack|eikones|c:\pack\eikones|eikones_pack_file.dat οταν τρεξουμε το προγραμμα θα δημειουργηθει φακελος "eikones" μαζι και ενα αρχειο eikones_pack_file.dat το οποιο περιεχει τα αρχεια σε ετοιμη μορφη για packing τωρα το προγραμμα που φτιαχνω σε vb απλα κανει την δουλεια πιο ευκολη... βρισκει αυτοματα τα αρχεια σε εναν φακελο και τα καταγραφει σε αρχειο .dat ετοιμο για pack οπως επισης κανει πιο ευκολο το unpacking .. επισης αλλαζει τoν κωδικα ωστε ο χρηστης να χρησιμοποει τον δικο του κωδικο extea και το δικο του extension
pmav99 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Η εύκολη λύση είναι να δίνεις τα στοιχεία αυτά σαν command line arguments στο πρόγραμμα της C/C++ (μπορεί να θέλει αλλαγές ο κώδικας, δεν τον έχω κοιτάξει) Επίσης έπρεπε να είχες ξεκινήσει το thread με αυτές ακριβώς τις πληροφορίες
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα