Форум » GUI » МиниГуи и MS VC 2017 » Ответить

МиниГуи и MS VC 2017

Andrey: gfilatov2002 пишет: [quote]Без проблем - это ведь тестовые сборки для любопытных [/quote] 1) А чем эти тестовые отличаются от рабочих ? Можно ли сразу делать каталоги типа такими C:\MiniGui - BCC C:\MiniGuiVC - 32бит C:\MiniGuiVC64 - 64бит 2) Чтобы все батники были уже настроены на такие пути ? 3) Какой(откуда) компилятор нужно поставить, чтобы было такое короткое имя C:\VC2017 ? Для компиляции своего проекта сделал build_vc1764.bat: chcp 1251 call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 call ..\..\buildapp.bat Tsb_export-vc1764.hbp pause Не собирает, выдаёт ошибку: hbmk2: Triggered by #require directive: hbxlsxml.hbc hbmk2[demo-vc17]: Warning: Cannot find hbxlsxml.hbc hbmk2: Compiling resources... Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384 Copyright (C) Microsoft Corporation. All rights reserved. hbmk2: Linking... Tsb_export985vc1764.exe LINK : fatal error LNK1181: [всякие сердечки] "hbxlsxml.lib" hbmk2[demo-vc1764]: Error: Running linker. 1181 link.exe @C:\Users\artyo\AppData\Local\Temp\1zabcl.lnk Я так понял что библиотеки нет в этой поставки МиниГуи. 4) Можно ли её собрать и сразу в поставку включить ?

Ответов - 11

gfilatov2002: Andrey пишет: А чем эти тестовые отличаются от рабочих ? Тем, что не все библиотеки из основной сборки были портированы и испытаны (только базовые, без которых не соберется пример MAINDEMO). Andrey пишет: Чтобы все батники были уже настроены на такие пути ? ЭТО НАДО СДЕЛАТЬ САМОСТОЯТЕЛЬНО С ПРИВЯЗКОЙ к своему программному окружению. Andrey пишет: Какой(откуда) компилятор нужно поставить Си-компилятор VC 2017 брал на сайте http://whosaway.com Это - урезанная версия, которая работает только из командной строки, подобно BCC 5.5 Andrey пишет: Можно ли её собрать и сразу в поставку включить ? Да, конечно. А сейчас это нужно сделать самому, все исходники есть в основной сборке.

Andrey: Бьюс уже который час со сборкой бесплатного Visual Studio 2017 Качал здесь - https://visualstudio.microsoft.com/ru/downloads/?rr=https%3A%2F%2Fwww.google.ru%2F Делаю путь к своей установке на компе: @echo off chcp 65001 call "D:\Program Files\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" rem call ..\..\buildapp.bat Tsb_composite.hbp - можно переделать под запуск из под Far set PROJ=Tsb_composite.hbp set OLDPATH=%PATH% set HMGPATH=C:\MiniGUIVC SET PATH=%HMGPATH%\harbour\bin;%PATH% echo #define HMGRPATH %HMGPATH%\RESOURCES > _hmg_resconfig.h COPY /b %HMGPATH%\resources\minigui.rc+%PROJ%.rc+%HMGPATH%\resources\filler _temp.rc >>NUL hbmk2 %PROJ% %2 %3 %4 %5 %6 %7 %8 %HMGPATH%\minigui.hbc -D__CALLDLL__ -q -warn=low -run >build.log 2>&1 del _hmg_resconfig.h del _temp.* set HMGPATH= set PATH=%OLDPATH% Победил, пример собирается, но что-то не нравиться в ресурсах. Выдаёт вот такую ошибку: hbmk2: Linker command: link.exe @C:\Users\Andrey\AppData\Local\Temp\sr02u6.lnk hbmk2: Linker script: -nologo -out:Tsb_composite.exe OBJ\1main.obj OBJ\Form_Tsbrowse.obj OBJ\Form_About.obj OBJ\Form_SelLang.obj OBJ\Form_SelDbf.obj OBJ\Form_SelDim.obj OBJ\Form_SetField.obj OBJ\util_Use.obj OBJ\util_Tsbrowse.obj OBJ\Form_Menu.obj OBJ\form_2TsbMenu.obj OBJ\Run_Table.obj OBJ\util_fonts.obj OBJ\util_InfoDbf.obj OBJ\util_OleXls.obj OBJ\WaitThreadIco.obj OBJ\_hbmkaut_1main.obj -libpath:C:\MiniGUIVC\harbour\lib\win\msvc -libpath:C:\MiniGUIVC\lib -subsystem:windows minigui.lib tsbrowse.lib hbprinter.lib miniprint2.lib adordd.lib calldll.lib hbct.lib hbtip.lib hbvpdf.lib hbmisc.lib hbziparc.lib hbmzip.lib minizip.lib hbwin.lib xhb.lib msvfw32.lib vfw32.lib hbextern.lib hbdebug.lib hbvmmt.lib hbrtl.lib hblang.lib hbcpage.lib gtcgi.lib gtpca.lib gtstd.lib gtwin.lib gtwvt.lib gtgui.lib hbrdd.lib hbuddall.lib hbusrrdd.lib rddntx.lib rddcdx.lib rddnsx.lib rddfpt.lib hbrdd.lib hbhsx.lib hbsix.lib hbmacro.lib hbcplr.lib hbpp.lib hbcommon.lib kernel32.lib user32.lib gdi32.lib advapi32.lib ws2_32.lib iphlpapi.lib winspool.lib comctl32.lib comdlg32.lib shell32.lib uuid.lib ole32.lib oleaut32.lib mpr.lib winmm.lib mapi32.lib imm32.lib msimg32.lib wininet.lib hbpcre.lib hbzlib.lib OBJ\Tsb_composite.res OBJ\_temp.res CVTRES : fatal error CVT1100: повторяющийся ресурс. тип: ICON, имя: 4, язык: 0x0409 LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден hbmk2[Tsb_composite]: Error: Running linker. 1123 link.exe @C:\Users\Andrey\AppData\Local\Temp\sr02u6.lnk Что и где нужно править ? Нашел в инете для CVTRES : fatal error CVT1100: повторяющийся ресурс. тип: ICON, имя: 4, язык: 0x0409 1) http://qaru.site/questions/10407466/fatal-error-cvt1100-duplicate-resource-typeicon-name1-c-visual-studio-c-2010 2) https://msdn.microsoft.com/ru-ru/library/3k67zd6z.aspx Для LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден 1) https://msdn.microsoft.com/ru-ru/library/7dz62kfh.aspx P.S. Проект C:\MiniGuiVC\Samples\TsBrowse\demo - собирается нормально ! Проблема в проекте Tsb_composite

gfilatov2002: Andrey пишет: повторяющийся ресурс. тип: ICON По-видимому, нужно оставить только одну иконку MSGINFO ICON res\2MiniGuiDbf.ico или 2MAIN_ICO ICON res\2MiniGuiDbf.ico которые действительно продублированы


Andrey: gfilatov2002 пишет: По-видимому, нужно оставить только одну иконку Переделал вообще этот Tsb_composite.rc: [pre2]// Using a resource file like this, you can include bitmaps, icons and sounds // inside EXE. // // Resource Resource Resource // Name Type FileName // A1MAIN_ICO ICON res\a1MiniGui.ico // ------ 1main.prg iExit48x1 ICON res\iExit48x1.ico iExit48x2 ICON res\iExit48x2.ico iAbout48x1 ICON res\iAbout48x1.ico iAbout48x2 ICON res\iAbout48x2.ico iCancel48x1 ICON res\iCancel48x1.ico iCancel48x2 ICON res\iCancel48x2.ico iOk48x1 ICON res\iOk48x1.ico iOk48x2 ICON res\iOk48x2.ico // ------- Form_Tsbrowse.prg A2MAIN_ICO ICON res\a2MiniGuiDbf.ico iExit32x1 ICON res\iExit32x1.ico iExit32x2 ICON res\iExit32x2.ico .....[/pre2] Убрал у него внизу [pre2]1 VERSIONINFO FILEVERSION 1,0[/pre2] Все равно не собирается.... Почему ? P.S. Проект C:\MiniGuiVC\Samples\TsBrowse\demo - собирается нормально !

Andrey: Сделал ещё меньше ресурсов, оставил всего несколько строк: [pre2]// Using a resource file like this, you can include bitmaps, icons and sounds // inside EXE. // // Resource name Resource Type Resource FileName // MAIL32 BITMAP res\Mail32.bmp Print32 BITMAP res\Print32.bmp Recno32 BITMAP res\Recno32.bmp CheckF28 BITMAP res\check_circle_false28x2.bmp CheckT28r BITMAP res\check_circle_true28red.bmp Floppy32 BITMAP res\Floppy32.bmp Mail38 BITMAP res\Mail38.bmp Print42 BITMAP res\Print42.bmp Table62 BITMAP res\Table61.bmp FLAG_EN BITMAP res\flag_en.bmp FLAG_KZN BITMAP res\flag_kaz.bmp FLAG_RU BITMAP res\flag_ru.bmp FLAG_UK BITMAP res\flag_ua2.bmp FLAG_BYR BITMAP res\flag_bel.bmp bDelRed24 BITMAP res\bDelRed24.bmp bSeach24 BITMAP res\bSeach24x.bmp bNoSeach24 BITMAP res\bNoSeach24x.bmp[/pre2] Теперь эти ресурсы подсоединяются в _temp.rc (до этого не соединялись), но теперь другая ошибка: CVTRES : fatal error CVT1100: duplicate resource. type:BITMAP, name:MAIL32, language:0x0409 LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден hbmk2[Tsb_composite]: Error: Running linker. 1123 Блин, и как теперь собирать ? Что то ломается при линковке ?

Andrey: Разобрался я со сборкой под MSVC. Ехе-ник собираю, но фиговина получается.... 1) Если в папке проекта нет *.hbp - то ехе-ник соберётся. 2) Если в папке проекта есть *.hbp, но в нём нет строк [pre2]# project Resources xxxxxxx.rc yyyyyyy.rc[/pre2] То тоже будет счастье - ехе-ник соберётся. 3) Если в папке проекта есть *.hbp и перечень хоть одного .rc то дело труба - ехе-ник НЕ соберётся !!! Будут такие ошибки: CVTRES : fatal error CVT1100: повторяющийся ресурс. тип: ICON, имя: 4, язык: 0x0409 CVTRES : fatal error CVT1100: duplicate resource. type:BITMAP, name:MAIL32, language:0x0409 LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден Блин MSVC линковщик тупее BCC, ему нужно только один супер-RC-файл, содержащий все .RC-файлы проекта. Приплыли... Теперь понятна мне ситуация, почему не собирается мой проект Tsb_composite.hbp hbmk2.exe компилирует ресурсы Tsb_composite.rc, а потом _temp.rc повторно с одинаковыми индефикаторами. http://qaru.site/questions/10407466/fatal-error-cvt1100-duplicate-resource-typeicon-name1-c-visual-studio-c-2010 Почитайте, очень интересное чтиво ! См. Ниже объяснение от Microsoft: Гэри Чанг опубликовал это интересное объяснение в другом месте в сети: ...... Таким образом, с текущим компилятором VC++, единственное, что можно сделать в этом случае, если вы хотите иметь несколько файлов ресурсов, - сохранить все ресурсы значков (и курсора) в одном файле .rc. Это позволит редактору ресурсов VC сохранить уникальные идентификаторы RT_ICON. Пожелайте, чтобы это помогло и спасибо за ваше понимание! С наилучшими пожеланиями, Гэри Чанг Поддержка сообщества Microsoft Блин уже 2019 год на носу, а они только с одним .rc файлом работают до сих пор... В случае с BCC 5.5.1 происходит по другому. Ему без разницы сколько в *.hbp перечисленно .rc-файлов, BCC или hbmk2.exe (я не знаю) берет ВСЕ файлы *.rc из папки проекта и преобразует их в *.res и далее в командной строке их перечисляет, для сборки. Отличное решение ! Как бы и VC заставить это сделать ? У меня в проекте 27 файлов *.rc - это из-за того что BCC не может собирать большие ресурсы, пришлось их бить на части. Мне знакомый С-ник подсказал решение, можно создать all.rc файл и в нём перечислить все .rc файлы проекта, включая и _temp.rc 1) Может можно как то сделать автоматом перечисление всех .rc в _temp.rc ? Это вопрос к Григорию ! Кто знает как - подскажите. 2) Как можно запретить hbmk2.exe обрабатывать случайно написанные в My.hbp *.rc ? [pre2]# project Resources xxxxxxx.rc yyyyyyy.rc[/pre2] Ну бывает, проглядел сборку ресурсов программист... 3) Нужно убрать ошибку при сборке (если есть свои данные в *.rc-файле) : CVTRES : fatal error CVT1100: duplicate resource. type:VERSION, name:1, language:0x0409 Т.е. в файле minigui.rc есть строка VS_VERSION_INFO VERSIONINFO и в моём *.rc-файле тоже есть такое же описание. Конфликт интересов... Мне предложили такое решение: [pre2]#include <winver.h> #ifndef __VERSION_INFO VS_VERSION_INFO VERSIONINFO FILEVERSION MG_VER_FILE PRODUCTVERSION MG_VER_PROD FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" /* LANGUAGE: US English (0x0409), ENCODING: Unicode (1200/0x04B0) */ BEGIN VALUE "Comments", "See LICENSE.txt for licensing terms." "\0" VALUE "CompanyName", MG_NAME "\0" VALUE "FileDescription", MG_NAME "\0" VALUE "FileVersion", MG_VER_FILE_STR "\0" VALUE "LegalCopyright", "Copyright ? 2005-2017 MiniGUI Team" "\0" VALUE "ProductName", MG_NAME "\0" VALUE "ProductVersion", MG_VER_PROD_STR "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0x04B0 /* LANGUAGE: US English (0x0409), ENCODING: Unicode (1200/0x04B0) */ END END #endif[/pre2] А в своём одном .rc файле (можно специально обозначить - version.rc) писать так: [pre2]#define __VERSION_INFO 1 VERSIONINFO FILEVERSION 1,0 PRODUCTVERSION 1,0 FILEOS 0x4 FILETYPE 0x1 ........[/pre2] 4) Как убрать ошибку при сборке, если .rc-файл не оканчивается пустой строкой ? Т.е. в конце файла должно быть всегда CRLF Ошибка вот такая: [pre2]C:\MiniGuiVC\...\Demo.rc(25) : fatal error RC1004: unexpected end of file found[/pre2]

gfilatov2002: Andrey пишет: Как можно запретить hbmk2.exe обрабатывать случайно написанные в My.hbp *.rc ? Только если убрать из файла minigui.hbc строку sources=${hb_curdir}_temp.rc но тогда ресурсы вообще не будут включены в приложение Andrey пишет: Как убрать ошибку при сборке, если .rc-файл не оканчивается пустой строкой ? Для этой цели предназначен пустой файл filler, который лежит в папке resources и копируется по следующей команде в батнике COPY /b %HMGPATH%\resources\minigui.rc+%1.rc+%HMGPATH%\resources\filler _temp.rc

Andrey: gfilatov2002 пишет: Для этой цели предназначен пустой файл filler, который лежит в папке resources и копируется по следующей команде в батнике Туда (в файлы сборки) тогда нужно добавить это изменение. Я не понял для чего это было. Сейчас понял. gfilatov2002 пишет: Только если убрать из файла minigui.hbc строку Очень жалко... Теперь бы не забывать отказаться от перечня ресурсов в .hbp файле....

Andrey: Собираю маленький пример для показа работы с C#. В папке сделал два батника: build_bcc.bat (call C:\MiniGUI\BATCH\hbmk2 demo-bcc) build_msvc.bat (call C:\MiniGuiVC\buildapp.bat demo-msvc) и два проекта: demo-bcc.hbp demo-msvc.hbp Для BCC ехеник собирается нормально, для VC2017 тоже собирается, но БЕЗ ресурсов (иконок, картинок нет) ! Сам проект и ресурсный файл: demo.prg Demo.rc Т.е. buildapp.bat требует обозвать ресурсный файл demo-msvc.rc: COPY /b %HMGPATH%\resources\minigui.rc+%1.rc+%HMGPATH%\resources\filler _temp.rc >>NUL А если в проекте несколько .rc ? Тогда вообще нельзя будет такого делать ? Я же предлагал ранее такое решение: echo ------- resource assembly --------- echo #define HMGRPATH %HMGPATH%\RESOURCES > _hmg_resconfig.h type nul > _temp.rc for %%f in (*.rc) do ( if /i "%%f" NEQ "_temp.rc" ( echo #include "%%f" >> _temp.rc ) ) echo #include "%HMGPATH%\resources\minigui.rc" >> _temp.rc Странно, что в новой версии его не применили.... Добавляю в проект файл demo-msvc.rc вот такого содержания: [pre2]// Resource Resource Resource // Name Type FileName // 1MAIN_ICO ICON res\MiniGui48.ico Csharp48 ICON res\Csharp48.ico #define __VERSION_INFO 1 VERSIONINFO FILEVERSION 1,0 PRODUCTVERSION 1,0 FILEOS 0x4 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904b0" { VALUE "FileDescription", "MiniGui Harbour C#\000" VALUE "FileVersion", "1.0." VALUE "InternalName", "demo.exe\000" VALUE "LegalCopyright", "(c) Copyright 2018 Verchenko Andrey (Dmitrov)\000" VALUE "LegalTrademarks", "Charp + Harbour + MiniGui\000" VALUE "OriginalFilename", "demo.exe\000" VALUE "CompanyName", "V-Soft Dmitrov, Moscow region\000" VALUE "ProductName", "MiniGui + C#\000" VALUE "ProductVersion", "1.0." VALUE "Comments", "Created by Verchenko Andrey <verchenkoag@gmail.com>\000" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409 0x04B0 } }[/pre2] Exe-ник перестаёт собиратся и выдаёт такую ошибку: hbmk2: Compiling resources... Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385 Copyright (C) Microsoft Corporation. All rights reserved. C:\VC2017\INCLUDE\sal.h(2886) : warning RC4005: '__useHeader' : redefinition C:\VC2017\INCLUDE\sal.h(2896) : warning RC4005: '__on_failure' : redefinition hbmk2: Linking... demo_msvc.exe CVTRES : fatal error CVT1100: duplicate resource. type:VERSION, name:1, language:0x0409 LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt hbmk2[demo-msvc]: Error: Running linker. 1123 link.exe @C:\Users\Andrey\AppData\Local\Temp\shaqnr.lnk Т.е. НЕЛЬЗЯ использовать свои VERSIONINFO, "FileDescription", "FileVersion" и т.д. В подписи ехе-ника будет стоять только то что написано в %HMGPATH%\resources\minigui.rc Дискриминация по языковому признаку !!! шучу, я ! В Пост N: 6114 описано как можно обойти это ограничение. Григорий, отправил тебе проект на почту.

gfilatov2002: Andrey пишет: В Пост N: 6114 описано как можно обойти это ограничение. Обновил архив MSVC-сборки с учетом этих (и всех последних) изменений (путь и имя архива остались прежние).

Andrey: gfilatov2002 пишет: Обновил архив MSVC-сборки с учетом этих (и всех последних) изменений (путь и имя архива остались прежние). Спасибо БОЛЬШОЕ !



полная версия страницы