Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Do6pbIu KoTeHoK Гость
|
Добавлено: Чт Апр 25 2002 17:38 Заголовок сообщения: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
В общем проблема такова: есть написанная мной программа на C++Builder, которая передает строку данных в конкретный exe-файл (в последствии их будет 3). Проблема вот в чем: можно ли скомпилять программу так, чтобы в результате компиляции все exe-файлы оказались внутри полученного или подскажите как можно решить эту проблему по другому, в общем важен результат - должен остаться ОДИН exe-файл! Придуманные мной и друзьями, но не подходящие решения: 1. Переименовать расширение файла из exe в, например, dat, а работать как с exe... Но тогда будет скомпилянный exe и 1-3 dat файлов, что неприемлимо. 2. Заархивировать все файлы, при разархивировани запускать ехе, а после завершения работы удалять все разархивированные файлы - тоже не подходит из-за увеличенного юзания оперативки. |
|
Вернуться к началу |
|
|
FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Пт Апр 26 2002 05:11 Заголовок сообщения: Ничего не понял |
|
|
>>Проблема вот в чем: можно ли скомпилять программу так, чтобы в результате компиляции все exe-файлы оказались внутри полученного или подскажите как можно решить эту проблему по другому, в общем важен результат - должен остаться ОДИН exe-файл!
А откуда их вообще три? Сколько ни пишу программы на разных языках, всё время в финале один файл получается, ехе-шник там или dll... |
|
Вернуться к началу |
|
|
Shaion Гость
|
Добавлено: Пт Апр 26 2002 05:41 Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
С какой целью ты делаешь 3 exe. |
|
Вернуться к началу |
|
|
Do6pbIu KoTeHoK Гость
|
Добавлено: Пт Апр 26 2002 20:30 Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
Есть 3 ехе файла, я пишу программу, из которой выходит командная строка для одного из ехе файла, но в результате после компиляции получается 4 ехе - мой и 3 к которым пишу. Как все эти файлы совместить в 1-н??? Вот что мне надо узнать. |
|
Вернуться к началу |
|
|
Adil Гость
|
Добавлено: Сб Апр 27 2002 15:43 Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
Могу предложить упаковывать exe-шники в первый exe-файл как ресурсы.
Суть идеи - хранить ехе-шники в первом файле как ресурсы типа RCDATA (бинарные). При необходимости, писать ресурс в файл с расширением ехе и запускать его, потом удалить, если надо.
Вот пример кода (Consol Win32): //Используются только API-шные функции и //функции open и write из С RTL //ФАЙЛ Lancher.CPP: #include #include #include #include //-------------------------------------------- .. ShowMessageD(); int main(int , char*) { //достаем дескиптор своего handla HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { ShowMessageD(); return 0; } //находим ресурс в самом себе HRSRC hRes=FindResource(hMod,"ItMe",RT_RCDATA); if(!hRes) { ShowMessageD(); return 0; } //грузим ресурс в память HGLOBAL hGl=LoadResource(hMod,hRes); if(!hGl) { ShowMessageD(); return 0; } //определяем размер ресурса(==ехе-файла) в байтах DWORD ExeSize=SizeofResource(hMod,hRes); if(!ExeSize) { ShowMessageD(); return 0; } //фиксируем ресурс на всякий случай BYTE *pnt=(BYTE*)LockResource(hGl); if(!pnt) { ShowMessageD(); return 0; } //открываем новый ехе-файл int k=open("ItMeFromRes.exe",O_BINARY|O_CREAT|O_WRONLY,S_IREAD|S_IWRITE); if(k==-1) { MessageBox(NULL,"Unable open output file!",NULL,0); return 0; } //пишем в него ресурс if(write(k,pnt,ExeSize)==-1) { ShowMessageD(); close(k); return 0; } close(k); //запускаем ехе-шник ShellExecute(NULL,"open","ItMeFromRes.exe",NULL,NULL,SW_SHOW.. можно удалить файл "ItMeFromRes.exe" return 0; } //- Функция вывода ошибки -------------------- void ShowMessageD() { LPSTR lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,NULL); MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION ); LocalFree( lpMsgBuf ); } // end of cpp-------------------------------- ФАЙЛ Lancher.RC: //подключается к проекту ItMe RCDATA "itme_exe.exe" // end of RC Естественно, на этапе компиляции файл "itme_exe.exe" должен наличествовать. У меня он был такой //itme_exe.cpp #include void main(void) { MessageBox(NULL,"It's me!","It's me!",0); }
Удачи. |
|
Вернуться к началу |
|
|
Adil Гость
|
Добавлено: Сб Апр 27 2002 15:48 Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
Опять кто-то съел угловые скобки! первые четыре инклюдника -
#include "windows.h" #include "fcntl.h" #include "io.h" #include "sys\stat.h"
и во втором срр #include "windows.h" |
|
Вернуться к началу |
|
|
Do6pbIu KoTeHoK Гость
|
Добавлено: Сб Апр 27 2002 18:08 Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? |
|
|
Спасибо, щас все попробую! |
|
Вернуться к началу |
|
|
|