Складіть та зв’яжіть свої проекти CVI повністю з MSVC; 40дослідження
Вступ
За допомогою CVI дуже легко скомпілювати свій код за допомогою оптимізованого компілятора. Я писав про це раніше. Тут ми йдемо далі, оскільки метою є компіляція та зв’язування всього проекту у Visual C ++, наприклад. Який інтерес? На мою думку, це подвійно: швидкість і компактність.
Але ей, давайте заспокоїмось, ми будемо рухатися вперед крок за кроком і з часом повернемось до теми.
Дуже простий приклад коду
Ми починаємо з дуже короткого прикладу коду, який працює в CVI IDE. Насправді важливо лише те, що код підтримує графічний інтерфейс. У функції зворотного виклику OnSwitch (), яка викликається при натисканні кнопки OK, ми просто вмикаємо та вимикаємо світлодіод. Словом, нічого дуже сексуального чи дуже складного.

Ось код для прикладу:
Зверніть увагу на функцію WinMain. Це насправді не корисно тут. Щоб попросити CVI згенерувати його, у редакторі графічного інтерфейсу натисніть меню Код/Створити/Весь код ... і встановіть прапорець Створити WinMain () замість головного ().
Генерація коду для графічного інтерфейсу
Коли ви закінчите грати з прикладом коду, ви повернетеся до середовища розробки CVI. Клацніть на меню Створення/Підтримка зовнішнього компілятора…, і з’явиться таке діалогове вікно.
Виберіть зі списку вихідний файл та введіть ім'я вихідного коду (ForUIR.c тут). Потім натисніть Огляд ..., щоб переконатися, що код буде сформовано поряд з іншими вихідними кодами вашого проекту. Нарешті натисніть кнопку Створити, а потім Готово, щоб повернутися до IDE.
Будьте обережні, внизу діалогового вікна відзначте назви бібліотек, які вам потрібно буде включити у свій проект MSVC.
На цьому етапі ви можете вийти з CVI і запустити MSVC. Тут ми будемо використовувати Microsoft Visual C ++ 2010 Express.
Компіляція проекту CVI у Microsoft Visual C ++ 2010 Express
Створити новий проект ...
Загалом, виберіть Порожній проект
Виберіть ім’я та каталог. Як правило, я створив підкаталог у каталозі проекту CVI, щоб там зберігати проект MSVC.
Коли з’явиться вікно проекту, запустіть диспетчер файлів Windows і знайдіть джерела вашого проекту CVI. Тут я вибираю TestCVIMSVC.c та ForUIR.c, і я перетягую до каталогу вихідних файлів проекту MSVC.
Тепер вкажіть менеджер файлів на наступний каталог:
Виберіть наступні три файли: cvirt.lib, cvisupp.lib та cviwmain.lib та перетягніть їх у проект MSVC. Ми повинні включити cviwmain.lib, оскільки наш вихідний код використовує функцію WinMain замість звичайної функції mai.
Це трохи зіпсує, але спробуємо створити додаток у режимі налагодження в MSVC 2010. Клацніть на F7. Бінго, як і слід було очікувати, він починає крутитися.
Навіть не боїться! Зайдіть під файловий менеджер і погуляйте далі
У диспетчері файлів Windows натисніть на шлях (у самому верхньому куті вікна), виконайте CTRL + C і поверніться до MSVC. Після натискання на Проект/Властивості переконайтесь, що Конфігурація встановлена на "Усі конфігурації". Потім у C/C ++, потім у загальному, виберіть Додаткові каталоги включення та вставте (CTRL + V) повний шлях до каталогу Включити, який ви щойно помістили в буфер обміну. Натисніть OK, щоб закінчити.
Давай поїдемо кататися. Клацніть на F7. Там це йде набагато краще !
Ну, є попередження, але загалом це добре. Давай, ми натискаємо на F5 для налагодження проекту. Бідність біди це не спрацьовує.
Насправді відбувається те, що виконуваний файл не може знайти файл .uir і, отже, не може його завантажити. Щоб виправити це, вам просто потрібно скопіювати та вставити файл .uir від руки в каталог ./Debug проекту MSVC.
Поки ми це зробимо, давайте двічі клацніть на Test.exe у каталозі. Алілуя, це працює! Давай, ми закриваємо програму і повертаємось до MSVC 2010 Express. Ми запускаємо проект у режимі налагодження (F5). Справжнє щастя все працює.
Звичайно, якщо ми переходимо в режим випуску та перекомпілюємо все це, це не спрацює, доки ми не скопіюємо файл .uir до каталогу ./Release нашого проекту MSVC. Після закінчення копіювання ви можете запустити виконуваний файл із каталогу або з IDE MSVC. Справжня радість.
Тоді що?
1 - У середовищі CVI у режимі випуску виконуваний файл становить 320 кб. Коли виконуваний файл компілюється та зв’язується з MSVC, він становить лише 9-10 кб. Це працює набагато краще, ніж дієта Дюкана в цій історії, і це може бути важливим у деяких випадках (наприклад, ціль у реальному часі).
2 - Окрім функцій API CVI (графічний інтерфейс, DAQ тощо), все інше (printf, функції управління файлами тощо) "береться" з бібліотек Microsoft. Цей код зазвичай дуже і дуже швидкий. Пам'ятайте, що ми робимо компіляцію, а також зв'язування в Visual Studio.
Будьте обережні, є ще деякі обмеження. Ви повинні створювати файл типу ForUIR.c кожного разу, коли додаєте елементи керування або індикатори, пов’язані з функціями зворотного виклику. У будь-якому випадку, не забувайте копіювати файл .uir до каталогів налагодження та випуску MSVC кожного разу, коли ви змінюєте останній. Зверніть увагу, що це можна автоматизувати з CVI за допомогою меню Build/Build Steps (наприклад, ви можете викликати команду DOS або пакетний файл, прочитати онлайн-довідку). Ми також можемо мати каталог “активи”, в якому ми спільно використовуємо файл .uir між проектами версій CVI та MSVC
Коротше кажучи, у нас є легший і швидший виконуваний файл. Сказавши це, потрібно трохи попрацювати. Однак я думаю, що гра дійсно варта зусиль. У ваших найкращих інтересах розробити та налагодити свій код за допомогою CVI (я впевнений, що він має один з найкращих налагоджувачів на ринку), а потім регулярно, у міру розвитку вашої програми, створюйте виконуваний файл у режимі Release за допомогою цього методу ( не чекайте за день до дати випуску вашої програми, щоб це зробити!)
Е-е ... Якщо в кінці дня ми зможемо перекомпілювати весь проект у MSVC, чи не існує способу піти трохи далі і створити суміш коду ANSI C та коду C ++ у MSVC? Ось хороша ідея ...
Давай, дивись наступний епізод.
Оновлення за серпень 2015 року
Оновлення 1
Я щойно провів тест із Visual Studio Community 2013 для робочого столу. Все працює нормально, як пояснювалося. Однак, коли я прошу сформувати Release версію програми, компонувальник помиляється. Так, так, я знаю, на зображенні нижче ви не бачите багато чого. Просто натисніть на нього, щоб прочитати повідомлення:
Щоб виправити ситуацію, перейдіть до опцій проекту, потім до категорії Linker і, нарешті, до додаткової опції. Нарешті, встановіть для параметра «Зображення обробників безпечних винятків» значення «Ні». Дивіться нижче:
Оновлення 2
Я вже коротко говорив про це у попередньому висновку (тоді що?), Але я не був дуже чітким. У будь-якому випадку, щодо організації файлів та каталогів, це так працює на моєму жорсткому диску. На найвищому рівні у мене є каталог CVI & MSVC, у якому я маю два підкаталоги CVI та MSVC. Вони містять лише файли, що стосуються управління проектами, робочої області та інших рішень. Тоді існує каталог src, який містить вихідні коди проектів, і каталог кінцевих активів, який містить файли uir. Саме в цей каталог ми розміщуємо файли зображень, звукові файли тощо.
Тоді в каталозі CVI ось що ми там знаходимо
Зверніть увагу, що є два каталоги Release та Debug, в яких CVI видалить відповідний виконуваний файл. Звичайно, все це налаштовано за допомогою Властивостей проекту CVI. Ах, так, я збирався забути ... У вихідному коді мені довелося змінити такий рядок:
Ми бачимо, що шукатимемо файл UIR у каталозі активів.
Нарешті, ось вміст мого каталогу MSVC
Ця організація дозволяє вам бути тихим і мати можливість тестувати речі зверху вниз за допомогою декількох компіляторів. Наприклад, я можу відредагувати файл UIR на CVI, зробити CTRL + S, перейти до Visual Studio, який залишився відкритим, виконати запуск і побачити результат. Подібним чином, якщо з Visual Studio я вношу зміни в одне з джерел, коли я переходжу на CVI, останній запитає мене, чи хочу я використовувати останню версію відповідного вихідного файлу ... Яка радість. Тільки не забудьте розподілити каталог активів поруч із виконуваним файлом у день розгортання або динамічно керувати пошуком файлу UIR (та інших ресурсів) у коді. До вас ...