Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 24 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1CPP: разработчикам - среда разработки (число прочтений - 175353 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1CPP: разработчикам - среда разработки
Ответ #60 - 21. Марта 2008 :: 23:16
Печать  
Имею в виду рецепт по отвязыванию от atlthunk.lib
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #61 - 21. Марта 2008 :: 23:30
Печать  
Uzhast писал(а) 21. Марта 2008 :: 23:15:
Попробовал с R2. Собралось, но вот этот рецепт нужно будет добавить в будущую инструкцию по сборке проекта Улыбка

Да, скорее всего, я это и пытался вспомнить Улыбка
Видимо, давно как-то сделал и забыл.

Что-то мне кажется, что при сборке не в именах дело.
Надо посмотреть, что там и как определяется в шаблонах MFC для разных версий компилятора.

И еще на wchar_t и MFC закономерные проблемы.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #62 - 21. Марта 2008 :: 23:33
Печать  
Uzhast писал(а) 21. Марта 2008 :: 23:15:
Правда, не понятно, стоит ли сверхновый SDK того, чтобы ##пу рвать настолько сильно Улыбка

Дык тут весь цимус не в SDK, а в /Qvc9 Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #63 - 22. Марта 2008 :: 00:29
Печать  
Uzhast писал(а) 21. Марта 2008 :: 23:15:
ИМХО, если бы было желание, то можно было бы обойти проблемы линковки. Собрать, например, специальную либу, которая бы содержала функции, которые не находятся при линковке. Эти функции могут просто переадресовывать вызов в функции с правильными именами. Включить либу в проект и все.

Короче, надо даже не либу, а просто отдельный файл-редиректор сделать.
Нехрен делать, в принципе, если ничего другого не придумается.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #64 - 22. Марта 2008 :: 08:38
Печать  
Uzhast

Вот, прикинь, какая фигня познавательная оказалась.
Все же vc6 манглит спецификации шаблонов функций по-другому, отбрасывая шаблонную часть имени.

Да, и заодно для vc6 умолчания, даже включенные для /Zc:forScope и /Zc:wchar_t действуют криво (т.е. не действуют), даже если в проекте включены.
Ты об этом точно знаешь, но так, на всякий случай еще раз отмечаю.

Код
Выбрать все
template<typename T>
wchar_t __stdcall SpecTest(T arg);

template<>
wchar_t __stdcall SpecTest(wchar_t arg);

void test_link()
{
	wchar_t arg = 0;
	cout << SpecTest(arg) << endl;
}
 



/Qvc6, /Zc:wchar_t явно не установлен (но в проекте выставлен в "Yes"):
Код
Выбрать все
// LNK2019: unresolved external symbol "unsigned short __stdcall SpecTest(unsigned short)" (?SpecTest@@YGGG@Z)
 


/Qvc6, /Zc:wchar_t явно установлен в cmdline
Код
Выбрать все
// LNK2019: unresolved external symbol "wchar_t __stdcall SpecTest(wchar_t)" (?SpecTest@@YG_W_W@Z)
 


/Qvc9, /Zc:wchar_t явно не установлен (но в проекте выставлен в "Yes"):
Код
Выбрать все
// LNK2019: unresolved external symbol "wchar_t __stdcall SpecTest<wchar_t>(wchar_t)" (??$SpecTest@_W@@YG_W_W@Z)
 



Короче, резюме: все отлично, буду собирать под /Qvc9 (ил /Qvc8), но спец. модуль переадресации придется набросать для таких специализаций и wchar_t.
Ну, благо там немного; сейчас покатаюсь по городу и набросаю.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1CPP: разработчикам - среда разработки
Ответ #65 - 22. Марта 2008 :: 09:48
Печать  
Это все хорошо, но я вот лично пока очень далек от всего этого.
Мне хотелось бы простую интструкцию:
скачай это, то и то, установи, сделай еще то-то и все.
Как-то пока не хочется в дебри залезать, других задач полно Улыбка
Думаю, что и другим разработчикам также.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #66 - 22. Марта 2008 :: 19:35
Печать  
artbear

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

Очень познавательная работа происходит именно сейчас.
И анализ существующих проблем, с которыми с легкостью мирился vc6, может существенно улучшить кодогенерацию.
А заодно и дать развернутый ответ на вопрос, зачем же все-таки понадобилось менять среду разработки.

P.S.
Вот такое, например, бывало:
Код
Выбрать все
	case methCompileAndExecute:
		{
			bool bOldEnableThrow = pBLModule->m_bEnableThrow;
			pBLModule->m_bEnableThrow = true;
			try{
				CValue res = pBLModule->Compile();
				if (0 == res.GetNumeric) // <--------
 


Иногда и более концептуальная фигня случалась.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #67 - 23. Марта 2008 :: 02:21
Печать  
Залил в icpp ремаппер специализаций vc6, который устраняет ошибки линковки.
В итоге проект можно (и нужно) собирать с ключами /Qms0 /Qvc9 (или /Qvc8 для ICL 9.1).
Он должен собираться без ошибок; предупреждений должно быть не более 2500. Улыбка

Осталось написать инструкцию, но не обязательно ждать, когда она будет готова (не знаю, когда).
Можно начать отсюда http://www.1cpp.ru/forum/YaBB.pl?num=1204706900/3#3
и решать проблемы по мере поступления.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1CPP: разработчикам - среда разработки
Ответ #68 - 23. Марта 2008 :: 04:18
Печать  
kms писал(а) 23. Марта 2008 :: 02:21:
В итоге проект можно (и нужно) собирать с ключами /Qms0 /Qvc9 (или /Qvc8 для ICL 9.1).

Ого!  Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #69 - 23. Марта 2008 :: 11:08
Печать  
Uzhast писал(а) 23. Марта 2008 :: 04:18:
Ого!  Улыбка

Ага! Улыбка Очень радостно, что у нас это получилось.

Залил сейчас более человечную версию Улыбка
Пока все это дело сочинял - пожалел о двух вещах:

1. Что дядька Бьярн так и не решился дать возможность распределенного описания классов (как это сделано с пространствами имен).
2. Что тип возвращаемого значения не участвует в процессе разрешения имени.

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

ConvertStringToBSTR,

не создавая своей реализации - поделись со мной, что ли, - на будущее.
У меня в лучшем случае получилась бесконечная рекурсия (хотя пытался разносить по разным единицам трансляции), на этом идеи кончились. Улыбка

Ну, не смотря на это, меня решение вполне порадовало.
Думаю, оставим, несмотря на рост числа предупреждений Улыбка - надо будет потом большую часть поотключать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1CPP: разработчикам - среда разработки
Ответ #70 - 23. Марта 2008 :: 12:25
Печать  
Инструкция (краткий draft)

1. Устанавливаем все, что находится здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1204706900/3#3
  • ICL нужно установить в режиме совместимости c Visual Studio 2005;
  • Boost можно не собирать, достаточно распаковать (пока необходимы только заголовки);
  • Ссылку на собранный STLPort добавил туда же (в список софта)

    2. В студии нужно прописать пути к заголовкам и к библиотекам.
    Это делается в Tools-Options-Projects and Solutions-VC++ Directiories, "Include files" или "Library files", соответственно.

    Рабочий вариант для заголовков:
    Код
    Выбрать все
    F:\_BuildArea\_boost\boost_1_35_1;
    F:\_BuildArea\_stlport\STLport-5.1.5\stlport;
    C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include;
    C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\atl;
    C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\mfc;
    $(VCInstallDir)PlatformSDK\include;
    C:\Program Files\Microsoft Visual Studio\VC98\Include;
     
    
    


    Рабочий вариант для библиотек:
    Код
    Выбрать все
    F:\_BuildArea\_boost\boost_1_35_1\stage\lib;
    F:\_BuildArea\_stlport\STLport-5.1.5\lib;
    C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib;
    C:\Program Files\Microsoft Visual Studio\VC98\Lib;
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\Lib;
     
    
    


    3. Собираем проект.
    Если возникают проблемы с ошибками при компиляции или линковке в PlatformSDK/ATL, возможно, необходимо сделать несколько исправлений:
    http://www.codeproject.com/KB/wtl/WTLExpress.aspx

    В общем и целом, сборка подготовленного проекта не представляет никакой сложности.
    Однако если какие-то нюансы все же возникнут, пишите, в чем дело; разберемся и документируем здесь.



    Сборка проекта icpp без ICL/STLPort (добавлено 2008-09-25):
    http://www.1cpp.ru/forum/YaBB.pl?num=1221910211/3#3
  • « Последняя редакция: 25. Апреля 2010 :: 09:53 - kms »  

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Uzhast
    1c++ power user
    Отсутствует



    Сообщений: 1341
    Зарегистрирован: 30. Августа 2006
    Пол: Мужской
    Re: 1CPP: разработчикам - среда разработки
    Ответ #71 - 23. Марта 2008 :: 16:02
    Печать  
    А ты на 100% уверен, что заголовки для MFC из PSDK совместимы с таковыми из VC6 и со 1С? А то мало ли...
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1CPP: разработчикам - среда разработки
    Ответ #72 - 23. Марта 2008 :: 16:39
    Печать  
    Uzhast писал(а) 23. Марта 2008 :: 16:02:
    А ты на 100% уверен, что заголовки для MFC из PSDK совместимы с таковыми из VC6 и со 1С? А то мало ли...

    Ну, попробуй взять kdiff и посравнивать.
    Я сколько смотрел, несовместимых отличий не нашел; в основном исправления носят здравый характер: специализации, int/INT_PTR, проверки версии _MFC_VER и т.д.
    Ну, т.е. не влияют на размеры. виртуальные таблицы, имена...
    На практике тоже с проблемами не сталкивался.
    Короче, посравнивай, я думаю, сомнения развеятся.

    P.S.
    Как твои успехи с последним SDK?
    Я так понял, там ATL просто отсутствует как класс? MFC тоже нет?
    Т.е. ATL ты берешь 8.0 из VS2005? А MFC из VS6?

    И стоит оно того, чтобы с ним возиться?
    « Последняя редакция: 23. Марта 2008 :: 18:20 - kms »  

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Uzhast
    1c++ power user
    Отсутствует



    Сообщений: 1341
    Зарегистрирован: 30. Августа 2006
    Пол: Мужской
    Re: 1CPP: разработчикам - среда разработки
    Ответ #73 - 23. Марта 2008 :: 19:41
    Печать  
    kms писал(а) 23. Марта 2008 :: 16:39:
    Как твои успехи с последним SDK?

    Если компилировать с "VC98\Include", то не компилируется. Если с "Visual Studio 9.0\VC\include", то компилируется, но не линкуется: "new", "delete", "exception", "__imp___localtime64", "security_cookie" и т.д.

    kms писал(а) 23. Марта 2008 :: 16:39:
    Я так понял, там ATL просто отсутствует как класс? MFC тоже нет?

    Нихрена нет. Даже вспоминаю разговоры на РСДН насчет бесплатной Студии. Раньше можно было взять Экспресс. У него нет MFC и ATL (?), но их можно бесплатно скачать вместе с PSDK. А теперь эта возможность накрылась ##пой.

    kms писал(а) 23. Марта 2008 :: 16:39:
    Т.е. ATL ты берешь 8.0 из VS2005? А MFC из VS6?

    Теперь взял из R2. Обоих.

    kms писал(а) 23. Марта 2008 :: 16:39:
    И стоит оно того, чтобы с ним возиться?

    Ну как сказать... Сейчас посмотрел на список инклюдов и не нашел ни одного от VC6. Улыбка Как бы шанс отвязаться от него совсем. Но вот что делать с завязками на новый CRT?... До каких пор их можно убирать самодельными затычками? Непонятно... Наверное, лучше будет жить на предпоследнем SDK Улыбка Хотя...  Очень довольный

    Кстати, насчет редиректора. Я так понял, у тебя при первом вызове определяется адрес конечной функции? Мне как-то представлялась либа, собранная с Qvc6 и с торчащими наружу функциями с манглингом, который хочет линкер после Qvc9. Во-первых, она собирается только один раз. Во-вторых, связывание происходит в "build-time". В-третьих, если включить LTCG, то редиректы могут полностью заинлайниться и накладных расходов на редирект вообще не останется. Правда, LTCG работает до хрена как долго, а расходы на редирект копеечные Улыбка Ну, ХЗ, как лучше. Улыбка Может, оно не так просто, как мне кажется Улыбка
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1CPP: разработчикам - среда разработки
    Ответ #74 - 23. Марта 2008 :: 20:06
    Печать  
    Uzhast писал(а) 23. Марта 2008 :: 19:41:
    Ну как сказать... Сейчас посмотрел на список инклюдов и не нашел ни одного от VC6. Улыбка Как бы шанс отвязаться от него совсем. Но вот что делать с завязками на новый CRT?... До каких пор их можно убирать самодельными затычками? Непонятно... Наверное, лучше будет жить на предпоследнем SDK Улыбка Хотя...  Очень довольный

    Да мне вот лениво возиться - если остается MFC6, ATL3, инструкция по сборке предельно простая - ну и смысл бицца об очередной дверной косяк от MS? Улыбка
    Тем более вся это безопасная чепуха - не так уж и безопасна при "грамотном" подходе, чудес-то не бывает.

    Цитата:
    Кстати, насчет редиректора. Я так понял, у тебя при первом вызове определяется адрес конечной функции? Мне как-то представлялась либа, собранная с Qvc6 и с торчащими наружу функциями с манглингом, который хочет линкер после Qvc9. Во-первых, она собирается только один раз. Во-вторых, связывание происходит в "build-time". В-третьих, если включить LTCG, то редиректы могут полностью заинлайниться и накладных расходов на редирект вообще не останется. Правда, LTCG работает до хрена как долго, а расходы на редирект копеечные Улыбка Ну, ХЗ, как лучше. Улыбка Может, оно не так просто, как мне кажется Улыбка

    Да с манглингом специализаций оказалось проще простого - они и сейчас инлайнятся.
    А вот с wchar_t - засада, а самая засада - с функциями, которые отличаются только типом возвращаемого значения.

    C либой идея классная, если честно, просто неохота было заморачиваться, хотелось сделать быстрее и проще.
    А если несовпадений будет больше - тогда, конечно, придется делать.

    Только я пока не понял, что делать с функциями, отличающимися только типом возвращаемого значения.
    Тут ведь даже идея с либой не спасает, как я понимаю.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 24
    ОтправитьПечать