Προς το περιεχόμενο

Visual Basic & C++ Compiler


Επισκέπτης

Προτεινόμενες αναρτήσεις

Καλησπέρα Στο Φόρουμ...

 

Προσπαθώ να φτιάξω ενα πρόγραμμα σε VB 10 ,  με το οποίο θα κάνω αλλαγές σε ενα source code αρχείο ".cpp",   και μετα να το κανει compile σε .exe...

 

υπαρχεί καποιος τρόπος να το κανω σε VB ?? ή Να χρησιμοποιήσω καποιο άλλο compiler... αν ναι , πιο?

 

σας ευχαριστώ πολύ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλησπέρα Στο Φόρουμ...

 

Προσπαθώ να φτιάξω ενα πρόγραμμα σε VB 10 ,  με το οποίο θα κάνω αλλαγές σε ενα source code αρχείο ".cpp",   και μετα να το κανει compile σε .exe...

 

υπαρχεί καποιος τρόπος να το κανω σε VB ?? ή Να χρησιμοποιήσω καποιο άλλο compiler... αν ναι , πιο?

 

σας ευχαριστώ πολύ

Εννοείς να φορτώσεις στη μνήμη ένα αρχείο .cpp, να του κάνεις προγραμματιστικά αλλαγές, και κατόπιν πάλι προγραμματιστικά να καλέσεις έναν ήδη εγκατεστημένο C++ compiler και να του περάσεις σαν argument το αλλαγμένο .cpp?

 

Αν ναι, δεν είναι κάτι ιδιαίτερα δύσκολο σε καμία από τις δημοφιλείς γλώσσες (και σε πολλές μη δημοφιλείς).

 

Μόνο που για VB10 κώδικα δεν μπορώ να σε βοηθήσω εγώ, ελπίζω να σε κατατοπίσει άλλο παιδί.

 

Αν εννοείς κάτι άλλο, διευκρίνισε το λίγο καλύτερα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εννοείς να φορτώσεις στη μνήμη ένα αρχείο .cpp, να του κάνεις προγραμματιστικά αλλαγές, και κατόπιν πάλι προγραμματιστικά να καλέσεις έναν ήδη εγκατεστημένο C++ compiler και να του περάσεις σαν argument το αλλαγμένο .cpp? 

 

Αν ναι, δεν είναι κάτι ιδιαίτερα δύσκολο σε καμία από τις δημοφιλείς γλώσσες (και σε πολλές μη δημοφιλείς).

 

Μόνο που για VB10 κώδικα δεν μπορώ να σε βοηθήσω εγώ, ελπίζω να σε κατατοπίσει άλλο παιδί.

 

Αν εννοείς κάτι άλλο, διευκρίνισε το λίγο καλύτερα.

Ακριβώς...

Βασικά το θέμα ειναι πως το εχω ηδη κανει κατι σχετικο... αλλα το προβλημα πως πρεπει μαζι με το προγραμμα μου να "κουβαλαω" και τον compiler (minigw32), μαζι με τα libraries και τα σχετικα... με αποτελεσμα να πιανει πολυ χωρο...

 

 

γιαυτο ψαχνω κατι πιο γρηγορο και ελαφρυ? αν υπαρχει... 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είναι όντως τόσο performance critical αυτό που θέλεις να κάνεις ώστε να χρειάζεσαι απαραιτήτως τη C και μάλιστα με αλλαγές και "compilation on-the-fly"? Γιατί αν δεν είναι θα μπορούσες να το κάνεςι όλο απευθείας σε VB πχ για να μην μπλέκεις. Επίσης είναι κάτι που θα το κάνεις bundle και θα το δώσεις σε άλλους?

 

Γράψε λίγο πιο αναλυτικά τι θες να κάνεις, μήπως υπάρχει καλύτερη λύση. Αυτό που ρωτάς, όπως είπε και ο migf1, είναι πολύ απλό σε οποιαδήποτε γλώσσα προγραμματισμού

 

1. διαβάζεις το αρχείο

3. κάνεις τις αλλαγές

3. γράφεις το αρχειο στο δίσκο

4. καλείς τον compiler.

 

Αν το πρόβλημα είναι το μέγεθος του gcc και των βιβλιοθηκών, η γλώσσα που θα χρησιμοποιήσεις για την επεξεργασία του αρχείου δε θα σε βοηθήσει σε τίποτα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ακριβώς...

Βασικά το θέμα ειναι πως το εχω ηδη κανει κατι σχετικο... αλλα το προβλημα πως πρεπει μαζι με το προγραμμα μου να "κουβαλαω" και τον 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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, κατέβασα την 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
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Υπάρχει σίγουρα καλύτερη λύση για να πετύχεις το σκοπό σου, αλλά δε μπορούμε να την προτείνουμε γιατί δε μας τον έχεις πει.

 

What is the XY problem?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε την 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++ και δεν μπορω να κατανοησω τι χρειαζετε και τι οχι

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατι δεν προσαμόζεις το c++ πρόγραμμα ώστε αναλογα με τι παράμετρο το καλείς να κάνει την αντίστοιχη λειτουργία. 

Ετσι δεν χρειάζεται να το ξανακάνεις compile.

Δε νομίζω να σου είναι πιο εύκολο να παράγεις c++ κώδικα  κατά το runtime.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατι δεν προσαμόζεις το 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,};  
^^^^Αλλαζω αυτο 
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Απο χτές παιδευομαι και δεν εχω κανει τιποτα...  απο οτι εψαξα στο ιντερνετ δεν υποστιριζετε απο τα 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.

 

Όλα αυτά αν έχω όντως καταλάβει τι θέλεις να κάνεις, κάτι για το οποίο όμως δεν είμαι καθόλου σίγουρος :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

σκεφτηκα να κανω αυτο:

 

θα προσθέσω στον παραπανω κωδικο αυτο:

http://www.cplusplus.com/reference/string/string/getline/

θα κανω μια φορα compile το προγραμμα και καθε φορα που θα το χρειαζομαι απλα θα αλλαζω τις ρυθμισεις σε ενα αρχείο τχτ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να μας εξηγήσεις με απλά λόγια τι είναι αυτό που προσπαθείς να φτιάξεις;

 

Για ποιο λόγο θες να καλέσεις προγραμματιστικά έναν C++ compiler και να τρέξεις και το εκτελέσιμο που θα παράξει; Φτιαχνεις IDE για παράδειγμα; Τι θα κάνεις αν το compilation γίνει fail? Χρειάζεσαι ή όχι το αποτέλεσμα που θα παράξει το compiled εκτελέσιμο όταν το τρέξεις κι αυτό προγραμματιστικά; κλπ, κλπ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να μας εξηγήσεις με απλά λόγια τι είναι αυτό που προσπαθείς να φτιάξεις;

 

Για ποιο λόγο θες να καλέσεις προγραμματιστικά έναν 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

 

 

 

 

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η εύκολη λύση είναι να δίνεις τα στοιχεία αυτά σαν command line arguments στο πρόγραμμα της C/C++ (μπορεί να θέλει αλλαγές ο κώδικας, δεν τον έχω κοιτάξει)

 

Επίσης έπρεπε να είχες ξεκινήσει το thread με αυτές ακριβώς τις πληροφορίες

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...