Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

У меня есть проблема, может кто сталкивался с таким при программировании на С++???

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 Smile
HMODULE hMod=GetModuleHandle(NULL);
if(!hMod)
{
ShowMessageD();
return 0;
}
//находим ресурс в самом себе Smile
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: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? Ответить с цитатой

Опять кто-то Smile съел угловые скобки!
первые четыре инклюдника -

#include "windows.h"
#include "fcntl.h"
#include "io.h"
#include "sys\stat.h"

и во втором срр
#include "windows.h"
Вернуться к началу
Do6pbIu KoTeHoK
Гость





СообщениеДобавлено: Сб Апр 27 2002 18:08    Заголовок сообщения: Re: У меня есть проблема, может кто сталкивался с таким при программировании на С++??? Ответить с цитатой

Спасибо, щас все попробую!
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...