• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

C++ без Framework

  • Автор темы DSDante
  • Дата начала
D

DSDante

Простите, если вопрос уже был (вопрос популярный), но ни поиск по форуму, ни вообще в инете мне не помог.
Итак, я написал программу, выдающую "Hello, world!", и хочу откомпилить ее в Visual Studio 2008 так, чтобы она запустилась на компах, где VS отсутствует (как и вообще Framework любой версии).
Большинство ответов на этот вопрос сводится к "а зачем тебе это вообще надо?" и "в висте уже есть фреймворк, лучше сразу привыкай". Но, во-первых, фреймворк есть на 2% компьютеров, которые мне встречались, во-вторых, мне не нравится виста, и в-третьих, моя гордость программиста не успокоится, пока я не решу эту простую, казалось бы, проблему. :)
Еще часто встречаются ответы, что, мол, запускать программу без фреймворка - то же самое, что запускать без операционки. Но ведь тот же самый код, скомпилированный в старом VC прекрасно работал!
 
@

@LE}{@NDER

Гы.
1. Создавай в студии С++ проект Win32 Console Application
2. Вытирай все, кроме #include "stdafx.h"
3. Вставляй код:

Код:
#include <iostream>
using namespace std;

void main()
{
cout<<"Hello world!\n";
getchar();
}
или
Код:
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, _T("Hello, world!"), _T("Hello world Application"), MB_OK);return 0;
}

3. Компилируй и запускай.

и никакого фреймворка не надо ]:->
А вообще это бред! Windows XP SP3 ставится с .NET Framework 2 - это как минимум, по-моему даже с 3м. Так что это сказки, что только на 5% компов стоит фреймворк. Ты в каком веке живёшь? А если считаешь, что он тебе не нужен, смысл тогда постить в тему .NET? Пиши на чистых С плюсах.
 
D

DSDante

Я создавал Empty Project, и вручную писал единственный *.cpp типа
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, _T("Hello, world!"), _T("Hello world Application"), MB_OK);return 0;
}
Прога весила килобайт эдак семь, но все равно содержала в себе манифест, и требовала фреймворк.

Будете смеяться, но я не знал, что существует WinXP SP3. :) И все равно хочется совместимости хотя бы со старыми сервис паками.
 
@

@LE}{@NDER

Меню Project - <Project Name> Properties - Configuration Properties - Manifest Tool - опцию Embed manifest ставь NO
если не поможет еще меняй Меню Project - <Project Name> Properties - Configuration Properties - Linker - Manifest file - Generate manifest=No
этого по идее должно хватить
 
D

DSDante

Уже пробовал. Создается файл *.exe.manifest, без которого прога выдает ошибку, мол, MSVCR90D.dll не найден.
 
E

European

DSDante, по моему Вы путаете основополагающие вещи.
Вы пишете на управляемом С++? Если да, то без установки NET Framework не обойтись. Если нет, то все должно работать после корректной настройки приложения.
 
D

DSDante

Все то же самое относится к прогам, которые компилировались в Borland C++ (в DOS).

Если нет, то все должно работать после корректной настройки приложения.
Кстати, когда я запускаю прогу с манифестом на компе без фреймворка, выдается ошибка, что программа некорректно настроена. Я три раза облазил все Project Properties, но решения проблемы не нашел.
 
E

etc

Но, во-первых, фреймворк есть на 2% компьютеров, которые мне встречались
Как определяли и эти 2% из скольки тестируемых?
во-вторых, мне не нравится виста
а чего так, пока самая лучшая десктоповая ось, по крайней мере у микрософта.
и в-третьих, моя гордость программиста не успокоится, пока я не решу эту простую, казалось бы, проблему. :(
плохо вникли в Сообщение #6, я так думаю.
 
E

European

DSDante, телепаты все в отпуске. Можете прямо ответить на мой вопрос?
 
D

DSDante

Как определяли и эти 2% из скольки тестируемых?
...
а чего так, пока самая лучшая десктоповая ось, по крайней мере у микрософта.
Давайте не будем спорить о вкусах, несовместимость с SP2 - уже достаточная причина разобраться в этом.

плохо вникли в Сообщение #6, я так думаю.
Объясните, пожалуйста. Как я понял, Managed C++ - это расширение синтаксиса C++, которое я никогда не использовал, и которого не было во времена Borland C++. Так что оно ни при чем.
 
E

European

Как я понял, Managed C++ - это расширение синтаксиса C++, которое я никогда не использовал, и которого не было во времена Borland C++. Так что оно ни при чем.
Так чего Вы тему в Net засунули, если используете чистый C++?
 
D

DSDante

Просто ошибся. Перенесите ее в С++ > VC, если хотите.
 
D

DSDante

Извините, я не специально. А проблема, имхо, все же существующая.
 
E

etc

Давайте не будем спорить о вкусах
А зачем вы начали?
несовместимость с SP2 - уже достаточная причина разобраться в этом.
А это то тут причем? на 2000 винде все работает
Ну да ладно, раз перенесли, значит ушел я.
 
@

@LE}{@NDER

DSDante, не нужно забывать, что любое приложение, даже самое простое, юзает виндозные библиотеки. Если это не нравится, есть выход - написать свою ось :(

Еще момент - если приложение консольное, то
Меню Project -> <Project Name> Properties -> Configuration Properties -> С/С++ -> Runtime Library -> поменять надо Multi-threaded Debug DLL (/MDd) на Multi-threaded Debug (/MTd)

после этого у меня все консольные приложения работают на других компах, где студии и в помине не было.
 
D

DSDante

Похоже, я нашел ответ на свой вопрос на .
Построение проектов в Visual C++ без создания манифеста не поддерживается. Каждая программа C/C++, построенная в Visual C++ 2005, должна иметь манифест с описанием зависимостей от библиотек Visual C++.
Получается, Микрософт забил на совместимость. :(

...

DSDante, не нужно забывать, что любое приложение, даже самое простое, юзает виндозные библиотеки. Если это не нравится, есть выход - написать свою ось :)

Еще момент - если приложение консольное, то
Меню Project -> <Project Name> Properties -> Configuration Properties -> С/С++ -> Runtime Library -> поменять надо Multi-threaded Debug DLL (/MDd) на Multi-threaded Debug (/MTd)

после этого у меня все консольные приложения работают на других компах, где студии и в помине не было.

Ура! Заработало!!! Я 2 ГОДА парился над этой ошибкой, и подумать не мог, что дело в этом. Программа потяжелела на 34 кБ, но это не существенно. И дело не в том, консольная программа или нет.
Огромное спасибо
 
D

DSDante

Немного поизучал данный вопрос, и вот что выяснил: добавление статичной библиотеки Multithreaded добавляет 43 кБ к файлу. Можно при этом не генерировать манифест (Project Properties - Linker - Manifest file - Generate manifest = No), но пропадает XP Style. В Warcraft 3, начиная с патча 1.21 в папке с игрой появились файлы
Microsoft.VC80.CRT.manifest,
msvcm80.dll,
msvcp80.dll,
msvcr80.dll,
которые обеспечивают совместимость со старыми сервис паками. Узнать бы, как это делается.
 
A

alexsid

Все просто
Пишешь прогу
Смотришь депенденсы (зависимые ДЛЛ)
Копируешь в папку с прогой все депенденсы
Потом пишешь манифест на все депенденсы

и вуаля :(

ЗЫ в Варкрафте так и сделали, кстати...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!