win32 · Шаг 4. Фаза 2 — сборка вьюверов (3 программы)

На этом шаге собираются три программы‑вьювера под 32 бита. Все они — MFC‑приложения (статическая MFC, набор символов MultiByte) и линкуются с библиотеками sfile95, complex, exprint.

Перед сборкой Фазы 2 убедитесь, что все 6 библиотек из Фазы 1 лежат в dist\win32\lib (см. 03-build-libs.md, раздел 3.8).

Перед сборкой: конфигурация Release, платформа Win32.


4.0 Что уже сделано в проектах вьюверов

Правки настроек сборки (.vcxproj/.sln), не код:

  • Старые .vcproj (формат VS2008) заменены на новые .vcxproj (toolset v145).
  • Подключён build\ExeOutput.props (вывод .exe в dist\<платформа>\bin).
  • Убраны жёсткие пути D:\work, c:\tmc.

Правка runtime‑бага вьюверов (Баг #5) — уже внесена в код. Без неё все три вьювера при запуске показывали ошибку MFC «Encountered an improper argument». Подробности — в 07-troubleshooting.md. Кратко, что изменено в коде каждого вьювера:

  • в MakeDocFileName вызовы SetPathName(...) дополнены вторым аргументом FALSE (SetPathName(GetTitle(), FALSE) и SetPathName(ch1, FALSE));
  • в InitInstance добавлены AfxOleInit(); и SetRegistryKey("<имя_программы>");
  • в StdAfx.h добавлен #include <afxdisp.h>.

Эти правки не зависят от разрядности (нужны и для win32, и для win64).


4.1 Общая последовательность для каждого вьювера

  1. File → Open → Project/Solution… и выбрать файл проекта .vcxproj вьювера из его папки (точное имя — в разделах 4.2–4.4 ниже).

НЕ открывайте TMCGROUT.SLN. В папке каждого вьювера лежит старое решение TMCGROUT.SLN (формат VS2008), и оно ссылается на устаревший TMCGROUT.vcproj с жёсткими путями. Если открыть .SLN, вы увидите проект «TMCGROUT» (а не TMCROS/TMC_DN) и соберёте старый проект. Новые, уже настроенные проекты названы по-разному: TMCROS.vcxproj, TMCGROUT.vcxproj, TMC_DN.vcxproj — открывайте именно их. 2. Проверить: конфигурация Release, платформа Win32. 3. Проверить, что в линковке указаны библиотеки (см. ниже). 4. Build → Build Solution (или Rebuild Solution для чистой сборки). 5. Дождаться Build: succeeded. 6. Убедиться, что .exe появился в dist\win32\bin.

Как проверить список библиотек линковки

Правой кнопкой по проекту → PropertiesLinker → Input → Additional Dependencies (Компоновщик → Ввод → Дополнительные зависимости). Должны быть перечислены:

sfile95.lib
complex.lib
exprint.lib
Linker → Input → Additional Dependencies для вьювера
Linker → Input → Additional Dependencies для вьювера

4.2 TMCROS.exe — вьювер временных сигналов

  • Папка: src\viewers\Tmcrtout
  • Проект (открывать этот файл): TMCROS.vcxproj
  • Результат: dist\win32\bin\TMCROS.exe
  • Линковка: sfile95.lib, complex.lib, exprint.lib

4.3 TMCGROUT.exe — вьювер матриц рассеяния

  • Папка: src\viewers\Tmcgrout
  • Проект (открывать этот файл): TMCGROUT.vcxproj
  • Результат: dist\win32\bin\TMCGROUT.exe
  • Линковка: sfile95.lib, complex.lib, exprint.lib

4.4 TMC_DN.exe — вьювер диаграмм направленностей

  • Папка: src\viewers\DiaNapGr
  • Проект (открывать этот файл): TMC_DN.vcxproj
  • Результат: dist\win32\bin\TMC_DN.exe
  • Линковка: sfile95.lib, complex.lib, exprint.lib

Этот вьювер использует вычислительные модули c2DArray и cIzl из соседней папки src\viewers\DiaNapr. Они компилируются вместе с проектом (общий предкомпилированный заголовок). Никаких дополнительных действий не требуется.


4.5 Проверка Фазы 2

Откройте <КОРЕНЬ>\dist\win32\bin. Должны лежать три файла:

TMCROS.exe
TMCGROUT.exe
TMC_DN.exe

Запустите каждый — должно открыться окно программы без ошибки «Encountered an improper argument». Для проверки открытия файла используйте тестовые данные из samples\SAMPLE_R (например, horns.soc).

Если всё в порядке — переходите к 05-build-kernels.md (Фаза 3 — ядра).

win32 · Step 4. Phase 2 — building the viewers (3 programs)

In this step three viewer programs are built for 32 bits. They are all MFC applications (static MFC, MultiByte character set) and link against the libraries sfile95, complex, exprint.

Before building Phase 2, make sure that all 6 libraries from Phase 1 are in dist\win32\lib (see 03-build-libs.md, section 3.8).

Before building: configuration Release, platform Win32.


4.0 What has already been done in the viewer projects

Build-settings changes (.vcxproj/.sln), not code:

  • The old .vcproj files (VS2008 format) were replaced with new .vcxproj (toolset v145).
  • build\ExeOutput.props is attached (.exe output to dist\<platform>\bin).
  • Hard paths D:\work, c:\tmc were removed.

A fix for a viewer runtime bug (Bug #5) — already applied in the code. Without it, all three viewers showed the MFC error "Encountered an improper argument" at startup. Details in 07-troubleshooting.md. Briefly, what was changed in each viewer's code:

  • in MakeDocFileName the SetPathName(...) calls were given a second argument FALSE (SetPathName(GetTitle(), FALSE) and SetPathName(ch1, FALSE));
  • in InitInstance, AfxOleInit(); and SetRegistryKey("<program name>") were added;
  • in StdAfx.h, #include <afxdisp.h> was added.

These changes are bitness-independent (needed for both win32 and win64).


4.1 The common sequence for each viewer

  1. File -> Open -> Project/Solution… and select the viewer's .vcxproj project file from its folder (the exact name is in sections 4.2–4.4 below).

Do NOT open TMCGROUT.SLN. In each viewer folder there is an old solution TMCGROUT.SLN (VS2008 format), and it references the obsolete TMCGROUT.vcproj with hard paths. If you open the .SLN, you will see the "TMCGROUT" project (not TMCROS/TMC_DN) and build the old project. The new, already configured projects have different names: TMCROS.vcxproj, TMCGROUT.vcxproj, TMC_DN.vcxproj — open exactly those. 2. Check: configuration Release, platform Win32. 3. Check that the link libraries are specified (see below). 4. Build -> Build Solution (or Rebuild Solution for a clean build). 5. Wait for Build: succeeded. 6. Make sure the .exe appeared in dist\win32\bin.

How to check the list of link libraries

Right-click the project -> Properties -> Linker -> Input -> Additional Dependencies. The following must be listed:

sfile95.lib
complex.lib
exprint.lib
Linker -> Input -> Additional Dependencies for a viewer
Linker -&gt; Input -&gt; Additional Dependencies for a viewer

4.2 TMCROS.exe — time-signal viewer

  • Folder: src\viewers\Tmcrtout
  • Project (open this file): TMCROS.vcxproj
  • Result: dist\win32\bin\TMCROS.exe
  • Linking: sfile95.lib, complex.lib, exprint.lib

4.3 TMCGROUT.exe — scattering-matrix viewer

  • Folder: src\viewers\Tmcgrout
  • Project (open this file): TMCGROUT.vcxproj
  • Result: dist\win32\bin\TMCGROUT.exe
  • Linking: sfile95.lib, complex.lib, exprint.lib

4.4 TMC_DN.exe — radiation-pattern viewer

  • Folder: src\viewers\DiaNapGr
  • Project (open this file): TMC_DN.vcxproj
  • Result: dist\win32\bin\TMC_DN.exe
  • Linking: sfile95.lib, complex.lib, exprint.lib

This viewer uses the computation modules c2DArray and cIzl from the neighboring folder src\viewers\DiaNapr. They are compiled together with the project (a shared precompiled header). No additional action is required.


4.5 Verifying Phase 2

Open <ROOT>\dist\win32\bin. Three files must be present:

TMCROS.exe
TMCGROUT.exe
TMC_DN.exe

Run each one — the program window must open without the "Encountered an improper argument" error. To test opening a file, use the test data from samples\SAMPLE_R (for example, horns.soc).

If everything is fine, proceed to 05-build-kernels.md (Phase 3 — kernels).