Сегодня, как было обещано ранее, я расскажу вам страшную тайну, как при помощи Visual C++ Express собирать полноценные Win32 приложения.
На самом деле, признаюсь честно, это не такой уж и большой секрет. На сайте Microsoft есть даже посвященная этому страничка. Вот только найти ее не совсем просто. А находится она здесь.
Для тех, кто не очень дружен с английским, расскажу вкратце, что нужно сделать.
- Качаем отсюда Platform SDK, устанавливаем его.
- В меню Tools выбираем пункт Options. В появившемся диалоге, открываем ветку Projects and Solutions и выбираем VC++ Directories. В соответствующие секции добавляем следующие пути:
Executable files: C:\Program Files\Microsoft SDK\Bin
Include files: C:\Program Files\Microsoft SDK\include
Library files: C:\Program Files\Microsoft SDK\lib
Естественно, если вы установили PSDK в другое место, пути должны быть другими.
- Далее, находим на диске файл corewin_express.vsprops, находящийся в папке %VSINSTALLDIR%\VC\VCProjectDefaults и меняем строку
AdditionalDependencies=»kernel32.lib» на
AdditionalDependencies=»kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib»
- В файле default.js , находящемся в %VSINSTALLDIR%\VC \VCWizards\AppWiz\Generic\Application\scripts\1033
комментируем две строки.LinkTool.AdditionalDependencies = »kernel32.lib $(NoInherit)»;
вот так:
// LinkTool.AdditionalDependencies = »kernel32.lib $(NoInherit)»;
- В файле AppSettings.htm, лежащем в %VSINSTALLDIR%\VC \VCWizards\AppWiz\Generic\Application\html\1033 необходимо закомментировать строки 441-444 вот так:
//WIN_APP.disabled = true;
//WIN_APP_LABEL.disabled = true;
//DLL_APP.disabled = true;
//DLL_APP_LABEL.disabled = true;
Теперь заходим File->New->Project. Выбираем Win32 Console Application. В появившемся диалоге выбираем Application Settings и видим, что у нас теперь появилась возможность создавать не только консольные приложения, но и полноценные Windows-программы, а также динамические и статические библиотеки.
Умельцы с Codeproject.com подружили Visual C++ Express с библиотекой WTL. К сожалению, полноценная работа с MFC и ATL в данной среде невозможна.
В следующей статье цикла я расскажу вам, как обойти отсутствие в Visual C++ Express встроенного редактора ресурсов. Есть два пути… но о них вы узнаете позже .
Испробовал массу редакторов ресурсов (для *.rc файлов) – ничего не удовлетворило. Самый лучший от Borland С++ 5.0, им и пользуюсь. Но у него есть один недостаток – не позволяет работать с 32 битными bmp.
Поэтому ОЧЕНЬ ЖДУ продолжения Вашей статьи с Вашим решение этой проблемы.
Июль 13, 2006 @ 10:56
Несмотря на большую загруженность в данный момент, постараюсь выложить статью на следующей неделе.
Только, пожалуйста, не ждите от меня каких-то особых откровений. Совсем идеального решения я, к сожалению, пока тоже не нашел.
Июль 13, 2006 @ 11:23
У меня в файле default.js две строки
LinkTool.AdditionalDependencies = ”kernel32.lib $(NoInherit)”;
Закомменитровал их обе, попробовал создать проект Windows Application, но когда нажал на кнопку «Finish», получил сообщение «Невозможно создание объекта сервером программирования объектов».
Что я делаю неправильно?
Октябрь 2, 2006 @ 16:24
Действительно, нужно закомментировать обе строки – мое упущение, я уже поправил в тексте.
Теперь по поводу ошибки. Я честно пытался получить ее у себя, но пока не вышло. По идее эти строчки не должны особо влиять на этапе создания проекта, ибо поддержка win32 изначально заложена в VC Express.
Кстати, в VC Express нет проекта Windows Application. Есть Win32 Console Application. Может у вас другой дистрибутив?
Октябрь 2, 2006 @ 17:22
Из-за ошибки проект просто не создался.
Я делал следующее: Зашел в File -> New -> Project, выбрал Win32 Console Application, указал имя проекта, затем в Мастере создания приложения выбрал страницу Application Settings, на этой странице выбрал из списка Windows Application, все остальное оставил по умолчнию, потом нажал на Finish и получил ошибку.
Кстати, не поясните, для чего нужно комментировать строки LinkTool.AdditionalDependencies = ”kernel32.lib $(NoInherit)”;?
Дело в том, что я успешно использовал VC 2005 Express для создания графических Win32 приложений (я выбирал тип проекта Console Application) на базе wxWidgets, и мне не помешали эти строчки.
Спасибо.
Октябрь 2, 2006 @ 17:43
Я не такой уж и майкрософтовед, но осмелюсь предположить, что они устанавливают дополнительные параметры для линкера в случае работы VC Express в «чистом» виде. Но после того, как мы прописали пути к PSDK, они наверное просто становятся не нужны. Хотя, возможно, все обстоит совсем не так.
Просто сам Microsoft здесь сказал это сделать.
Октябрь 2, 2006 @ 18:05
Уж полночь близится, а Байрона все нет… Где же обещанный обзор рес-эдиторов?
Ноябрь 28, 2006 @ 16:38
Еще и года не прошло, а народ уже возмущается…
Ребята, как (если) только разгребу дела, сразу же сделаю обзор.
Ноябрь 28, 2006 @ 16:43
visual c++ 2005 txspress
Сообщите,пожалуйста, есть ли в ..vc\include или в других библиотеках заголовочный фойл windows.h, необходимый
для русификации вывода на консоль. Спасибо
Апрель 20, 2007 @ 8:08
Он имеется в Platform SDK, так же как и необходимые библиотеки.
Кстати, не совсем понятно, что подразумевается под русификацией консоли.
Апрель 20, 2007 @ 9:09
Author: Алексей
Comment:
Он имеется в Platform SDK, так же как и необходимые библиотеки.
Кстати, не совсем понятно, что подразумевается под русификацией консоли.
——————–
В моем visuac++ 2005 Express, который я поставил с диска, который купил на рынке в Москве, какой-то куцый
DSK\v2.0/ В нем библиотеки Bin; Boolstrapper; Does; Lib
и библиотеки Include там нет.
Я хотел скачать по вашим рекомендация старый SDK,
зашел на сайт Microsoft. но там столько разных редакций.
Какой вариант качать я пока не разобрался
Что касается русификации, то Вы легко поймете, посмотрев эту рабочую программку
//——-
//Microsoft Visual c++ 2005 Express
//Эта Win32-приложение формально работает. Оно копирует содержимое файла
//D:\MyLib\test.txt в вектор строк. Функция cout выводит на экран в коде..
//вместо з – ч, 0 – Ю, р – Е а – п и т.д. Короче, консоль работает с кодовой
// страницей 866, а редактор VС++ c кодовой страницей win-1251, SWin=»ёЁTюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФ
// ГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ»;
//————–
// Как быстро запустить программу?
// 1. Скопируйте эту программу в Блокнот и запомнте на диске
// 2. Создайте win32-приложение, удалить там все строки и скопировать туда эту программу
// 3. Запустите Builg и завтем выполните.
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL,»rus_rus.866″);
vector v;
ifstream in(«D:/MyLib/test.txt»);
string line;
while(getline(in, line))
v.push_back(line); // Занесение строки в конец вектора
// Нумерация строк:
for(int i = 0; i
Апрель 20, 2007 @ 12:07
Думаю, для Вашего случая сгодится любой SDK (даже, думаю, и DDK, начиная от win98).
Еще более простым вариантом (если SDK нужен только для для этого) будет являться собственный перекодировщик, а именно, массив на 255 элементов, или даже меньше, если не решать задачу «в лоб».
И ещё вариант. Если в Вашем «куцем» SDK есть библиотека kernel32.lib, то можно самому написать h-файл для функций LoadLibrary и.т.д, а дальше грузить любые необходимые функции динамически.
Если и такой библиотеки нет, существуют утилиты, позволяющие сделать *.lib файлы из *.dll
Апрель 20, 2007 @ 12:24
Спасибо, Алексей.
1.библиотека kernel32.lib есть:
2.пока пишу перекодировщик для русских больших и малых букв. Это два массива
const char win[67]={127, // Кодовая таблица Win-1251 при работе
192,193,194,195,196,197,168,198,199,200,201, // в редакторе
202,203,204,205,206,207,208,209,210,211,212,
213,214,215,216,217,218,219,220,221,222,223,
224,225,226,227,228,229,184,230,231,232,233,
234,235,236,237,238,239,240,241,242,243,244,
245,246,247,248,249,250,251,252,253,254,255
};
const char dos[67]={127, // Кодовая таьлица 866 = ОЕМ для вывода на дисплей
128,129,130,131,132,133,240,134,135,136,137,
138,139,140,141,142,143,144,145,146,147,148,
149,150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,241,166,167,168,169,
170,171,172,173,174,175,224,225,226,227,228,
229,230,231,232,233,234,235,236,237,238,239
};
———- ищу индекс символа в Win и по нему опрелеляю код символа в Dos.
К SDK вернусь попоэже
Апрель 20, 2007 @ 14:44
2Иван Моисеевич:
Не самый оптимальный способ перекодировки – у вас появляется цикл. Лучше сделать перекрестные массивы – код символа в одной кодировке, является индексом во втором массиве.
Апрель 24, 2007 @ 13:54
Привет,Алексей
Пол дела сделам. Но мне надо читать
текстовый файл и в перекодированном виде выводить на консоль. Читаю символьный файл, а функция работает с unsigned char и пока не могу состыковать их.
Но это дело времени. Спасибо за внимание
—————
#include
#include
using namespace std;
//функция определения длины массива символов
unsigned int Length(const unsigned char str[])
{
int len = 0;
while (str[len++]);
return len – 1;
}
// функция перекодирования Win-1251 в Dos (OEM)
void WinToDos (unsigned char t[])
{
int n = Length(t); // 23 c
for (int i = 0; i 239) { t[i] -= 16; continue; }
if (t[i] > 191) { t[i] -= 64; continue; }
if (t[i] == 184) { t[i] = 241; continue; }
if (t[i] == 168) t[i] = 240; // 29
}
}
// Контрольный пример
int main ()
{
unsigned char text1[] = «А Б В Г Д Е Ё Ж Э И Й К Л М Н О П Р С ТУФХЦЧШЩЪЫЬЭЮЯ\n»;
WinToDos(text1);
cout
Апрель 24, 2007 @ 23:04
Здесь, в комментариях, некоторые символы обрезаются парсером, поэтому код становится плохо читаемым и понимаемым.
Предлагаю продолжить обсуждение на нашем форуме в этом разделе http://beta.delta-z.com/cgi-bin/yabb2/YaBB.pl?board=application
Апрель 24, 2007 @ 23:18
//функция определения длины массива символов
unsigned int Length(const unsigned char str[])
{
int len = 0;
while (str[len++]);
return len – 1;
}
Я вижу, вы легких путей не ищете. Или функция strlen() для вас не удобна?
Апрель 25, 2007 @ 14:53
А у меня винда нелицензионная, не могу скачать Platform SDK…
но ведь надо ж) подскажите, пожалуйста, где б еще качнуть)
Сентябрь 7, 2007 @ 1:38
Мегабайт с хвостиком весит – могу скинуть. Но он еще потом с инета качает
Сентябрь 29, 2007 @ 12:23
Можно отсюда http://ftp.ufanet.ru/pub/microsoft/sdk/
Сентябрь 30, 2007 @ 17:27
здравствуйте
а никто случайно не работал с libxml2 – есть проблема с русскими символами в xml-документе, т.е. они вроде должны читаться в формате utf8, но на экран выводится нечитабельное сообщение, как с этим бороться?
Октябрь 30, 2007 @ 14:50
Спасибо за статью, прикрутил SDK от 2003 студии и очень рад что не приходится заморачиваться с про версией
Ноябрь 25, 2007 @ 21:57
ОЧЕНЬ!!!! жду статью о редакторе ресурсов для MS Visual C++ 2008 Express.
. ОЧЕНЬ ЖДУ!!!
Только учусь, и не хочу писать под .NET, а редактора ресурсав(кнопочки окошки…) для чистого с++ там НЕТ
Ноябрь 28, 2007 @ 17:00
Есть ли разница, если стоит Vista Basic и VC++ 2008 Express?
Январь 23, 2008 @ 0:45
Добрый день!
Скажите пожалуйста, можно ли использовать визуальный редактор экранных форм при создании win32 Forms application.
Проще говоря, если использовать CLR то можно из ToolBox`а накидать control`ов на форму, а для win32 – не получается….
Январь 25, 2008 @ 11:01
2 Владимир… MFC не нужен, редактор ресурсов тоже не нужен. Есть wxWidgets и Qt4, есть из чего выбрать на чем делать гуй в экспесс версиях VS.
Февраль 1, 2008 @ 11:30
Интересная статья. И мне захотелось научить свой Visual C++ 2005 Express
писать полноценные Windows приложения.
Но ссылка на SDK ведет к Windows® Server 2003 R2 Platform SDK ISO
Я так понимаю это не совсем то.Может кто нибудь подскажет где скачать
PSDK для VC++ 2005 Express ?
Июль 31, 2008 @ 17:18
На то он и Platform, чтобы быть ориентированным на платформу, а не на среду разработки. А платформа Windows® Server гораздо шире, нежели десктоп.
Так что ставьте его смело, и всё у Вас получится.
Июль 31, 2008 @ 18:01
@BlackBerry: Вместо Visual C++ 2005 Express можно использовать Visual C++ 2008 Express. В него входит Platform SDK, и ничего дополнительно скачивать и устанавливать не нужно.
Июль 31, 2008 @ 20:06
Спасибо за оперативный ответ.
Меня смутил тот факт, на странице в System Requirements не указана Windows 2000
на которой я работаю.Правда, в подразделе Overview она упоминается.
Еще раз спасибо.
Июль 31, 2008 @ 21:46
Я в программировании пока «полный ноль». Скачал Visual C++ 2005 Express Edition и кучку книжек, пытался что-то спрограммировать. Компилятор выдавал – «не найден файл» – и указывал на строку «#include «. Я понимал что у него нет библиотеки. А у меня «случайно завалялся» Borland C++ Compiler 5.5. Не знал как подключить. Случайно напоролся на этот сайт, увидел статью «Visual C++ Express – как написать полноценное Win32 приложение». ОГРОМНОЕ СПАСИБО!!! Буду почаще сюда заглядывать.
Февраль 4, 2009 @ 14:40