Domanda

C'è un modo per collegare un file exe esistente con altri file di origine C ++ durante la compilazione? Quello che sto effettivamente cercando di fare è quello di comprimere e decomprimere alcuni file nel mio programma di console che utilizzano LZMA (7zip) SDK, ma purtroppo è molto difficile da utilizzare per un newbie.

C'è una versione a riga di comando di LZMA chiamato 7za.exe e mi chiedo se in qualche modo posso incorporare nel mio programma e utilizzarlo come una funzione. Può essere facilmente utilizzato con la funzione di sistema () (che sembra essere una cosa molto pericolosa da usare), ma poi se io mando il mio programma a qualcuno che non ha 7za.exe nella cartella giusta non funzionerà.

Mi sono imbattuto in CreateProcess () in file di intestazione WINDOWS.H ma sembra per raggiungere ciò che il sistema () fa in modo più adeguato e avanzato. Non so se si può effettivamente il file exe come un file oggetto durante la compilazione

È stato utile?

Soluzione

CreateProcess() è una chiamata API di Windows per avviare un processo, esattamente come sembra, come un bambino del programma che si può controllare conoscendo è HANDLE. system() esegue un comando di sistema. Questo è quanto potrai mai sapere e io personalmente evitare di utilizzare a tutti i costi - anche perché non è portabile (la funzione esiste su Windows e Linux, ma il comando non sarà)

.

E 'possibile aggiungere i dati alla fine di un'immagine EXE - come il lavoro degli installatori. Date un'occhiata a questo Microsoft articolo di supporto, che stranamente si dà il codice in base, ma si dovrebbe essere in grado di trasformarlo in C ++ banalmente. Ecco un articolo sulla la creazione di un auto-estrattore , che potrebbe essere più adatto. Entrambi dovrebbero consentire di incorporare i file in exe.

Non consiglio di estrarre 7za e chiamare da System() o CreateProcess() - vi consiglio di imparare l'SDK. E 'difficile, ma imparerete molto da farlo.

Infine, come si dovrà modificare un file exe esistente non sarà in grado di farlo a tempo di compilazione. Avrete bisogno di avere il codice aggiungere a che la propria immagine o di un'altra immagine.

Ulteriori dettagli su dati indirizzamento aggiunto a un exe .

Altri suggerimenti

Bene, provate questo ...

  1. Scrivi un'utility a riga di comando che semplicemente copia un file alla fine di un altro. Si potrebbe fare questo con il file di Windows di I / O o comandi della shell.
  2. Fare un passo post-generazione che gestisce questo programma di utilità. Il vostro programma sarà pienamente collegare il solito modo, e allora la vostra utilità semplicemente aggiungerà byte del secondo exe per l'exe di destinazione.

Questo è il passaggio di collegamento. Ora l'accesso runtime per l'exe è una cosa diversa. In sostanza, l'algoritmo è questa:

  1. Aprire il file EXE per essere incorporato in un editor binario a livello di byte (Msdev.exe farà). Prendere nota dei primi 30 o 40 byte come marcatore unico per l'inizio del file.
  2. Scrivi una funzione che apre il file composto creato in precedenza e le ricerche per il file incorporato, cercando per il marcatore unico.
  3. Una volta che l'inizio del file incorporato viene trovato, copiare i byte di quel file per un secondo nuovo file utilizzando il file di I / O.
  4. Eseguire il nuovo file utilizzando il sistema () o API simile.

Se si distribuisce il lavoro di qualcun altro in questo modo, si prega di ottenere la licenza corretta. In genere è una violazione del copyright per gettare qualcun altro binario in proprio -. Ci sono eccezioni, naturalmente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top