Как скомпилировать excel в exe

Обновлено: 04.07.2024

Я создаю программу на C ++, но хочу предложить пользователю только EXE-файл. Однако я использую библиотеки (в том числе curl), в которых есть некоторые библиотеки DLL. Можно ли скомпилировать эти dll в файл .exe?

Я использую Code :: Blocks и mingw.

Для этого вам понадобится статическое связывание. Для этого необходимо, чтобы все ваши библиотеки (и библиотеки, от которых они рекурсивно зависят) были доступны как статические библиотеки. Имейте в виду, что размер вашего исполняемого файла будет большим, поскольку он будет нести весь код из этих статических библиотек. Вот почему в первую очередь были изобретены разделяемые библиотеки (DLL), чтобы иметь возможность совместно использовать общий код между приложениями. Однако это не всегда работает так хорошо в Windows.

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

В DDJ есть статья за 2002 год, в которой может быть то, что вы хотите:

В основном он использует комбинацию связывания с DLL с помощью функции «отложенной загрузки» MSVC и упаковки DLL как встроенного ресурса в EXE. Затем DLL автоматически извлекается во время выполнения при первом вызове одного из экспортов.

Я не использовал эту технику, поэтому не могу сказать, насколько хорошо она работает, но это определенно кажется отличной идеей.

Вы можете использовать ILMerge

Однажды я наткнулся на утилиту dll2lib. Интересная штука, хоть и дорогая. Он позволяет преобразовать практически любую dll в статическую библиотеку, которая позже может быть связана с вашим приложением для создания надежного exe. IIRC, бесплатная версия покажет определенное уведомление (MessageBox) при входе в функцию из такой сгенерированной библиотеки.

Вам понадобятся специальные инструменты для упаковки, такие как XBundler.

Если вам действительно нужно это сделать, вы можете использовать эту замечательную библиотеку, которая позволит вам загружать DLL из памяти. Я использовал его для чтения библиотеки DLL из ресурса и загрузки ее для себя.

Я новичок в C ++ и CODE :: BLOCKS (примерно через неделю), и у меня была такая же проблема. Ответы хороши, но их реализация не объясняется для такого нуба, как я. (Как сказать пещерному человеку, чтобы тот вставил ключ в замок зажигания. «Что такое КЛЮЧ? Что такое ЗАЖИГАНИЕ?»). После того, как я достаточно повозился, я скомпилировал (без каламбура) следующее решение:

В меню CODE :: BLOCKS (у меня v20.03) нажмите «Настройки», затем «Компилятор . ».

Слева нажмите «Глобальные настройки компилятора» (по умолчанию).

На вкладке «Настройки компилятора» установите флажки рядом с:
статическая библиотека libgcc [-статическая-libgcc]
статическая библиотека libstdc ++ [-static-libstdc ++]

На вкладке «Параметры компоновщика» введите следующее в поле «Другие параметры компоновщика:»:
-static -lpthread

Нажмите «ОК», и вы золотые! Ваш скомпилированный C ++ EXE может работать как автономный.

Я попробовал это, составив пару своих учебных проектов, и это сработало. Это добавляет около 2,3 МБ к размеру EXE. Никаких обещаний, что это будет работать со всеми вашими проектами, только то, что пока это работает для меня.


ОБНОВЛЕНИЕ, 12.01.2021 - Уменьшите размер EXE !:

На вкладке «Настройки компилятора» прокрутите вниз до «Оптимизация» и проверьте:
Удалите все символы из двоичного файла (минимизирует размер) [-s]

Это уменьшило один из моих скомпилированных EXE-файлов с 2354k до 820k!

В общем нет. У DLL есть особое поведение, которое нетривиально, такое как получение Loader Lock при загрузке и вызов DllMain в этих точках. Хотя теоретический компоновщик может организовать вызов каждого DllMain из приложения main (), этого не произойдет при Loaded Lock. Эта блокировка загрузчика находится под контролем ОС. Кроме того, библиотеки DLL уведомляются о новых потоках через свою DLLMain, и это тоже почти невозможно подделать.

Возможно ли из написанных в Excel макросов создать как отдельный файл *.exe / VBA?
Здравствуйте! Помогите пожалуйста, возможно ли создать из своей работы в Excel отдельное.


Возможно ли написанный в Excel макрос создать как отдельный файл *.exe
Добрый день! Такой вопрос, подскажите пожалуйста, возможно ли написанный в Excel макрос создать.

Возможно ли средствами VBA использовать autofilter не открывая файл Excel?
Может кто сталкивался: возможно ли средствами VBA использовать autofilter не открывая файл Excel.

Сложный запрос, (возможно с применением VBA?)
Доброго всем времени суток, нужна ваша помощь. Как создать запрос, чтобы считать объем продаж за.

А я как то про такое ришение и не подумала.
Спасибо Вам ограмное, все получилось очень даже ничего.

Решение

  1. создайте текстовый файл с расширением "txt";
  2. замените расширение на:
    vbs
  3. щёлкните правой кнопкой мыши по vbs-файлу - Открыть с помощью - Блокнот;
  4. файл откроется;
  5. запишите туда код, который очень похож на VBA, но имеет какие-то свои особенности;
  6. закройте файл "vbs";
  7. два раза по нему щёлкните и запустится код.
Скрипт спасибо огромное, это очень полезная и интересная информация.

Как создать файл DLL так, чтобы его можно было подключить к VBA Excel?
Пытаясь научиться подключать к VBA хотя бы самую тривиальную функцию на C++. Для примера написал.

Возможно ли как-то открыть файл .exe в Visual Studio для просмотра кода программы?
Возможно ли как-то открыть файл .exe в Visual Studio для просмотра кода программы?


Написать макрос VBA для копирования и упорядочивания данных в другой файл Excel
Как реализовать задачу? need help:-|. Есть список людей с ФИО, в нем напротив каждого человека есть.


Вызов уже созданой формы из формы
Есть главная форма, как вызвать другую форму? Форма есть в Експлорере, но как её вызвать?

Для каждого exe-файла создать bat-файл для его запуска
Не могу понять как создать exe файла создать бат файл для его запуска?

Я создал инструмент с использованием VBA (.xlsm) и хотел бы преобразовать его в файл .exe. Я бы хотел, чтобы этот значок Excel не отображался после преобразования в файл .exe (действующий как пользовательское приложение). Я знаю, что вы можете создать ярлык и изменить значок, но хотели бы полностью удалить значок Excel или, по крайней мере, все еще иметь файл excel где-то в папке, но быть доступным через значок .exe.

Есть идеи, как это лучше всего сделать?

2 ответа

Если вы ограничены разработкой в Excel, вы можете попробовать использовать сценарий VB для запуска Excel.
Как ты это делаешь?

Используя Блокнот, создайте файл .vbs . Как его создать?
Просто сохраните файл и выберите Все файлы (*) в диалоговом окне Сохранить файл как .
Придумайте удобное имя и используйте расширение .vbs .
Вот и все, теперь у вас есть исполняемый файл Vb Script .

Затем напишите код, чтобы открыть и запустить Excel.
Вы можете ознакомиться с тем, что здесь говорит brettdj.
Обратите внимание на комментарий Дэвида. хотя. Если вам нужно открыть книгу в режиме Readonly (сохранять книгу не нужно, это шаблон) или ReadWrite (необходимо сохранить книгу после запуска макроса). Самый простой код будет выглядеть примерно так, как написал brettdj. Давайте просто обратим внимание на открытие книги как ReadOnly .

Измените True на False , чтобы получилось ReadWrite . Сохраните, и ваш exe-файл готов.

Поскольку вам нужен исполняемый файл, я предполагаю, что у вас есть формы в Excel.
Если мое предположение верно, вы можете затем использовать Events для закрытия и завершения Excel.
Что-то вроде ниже который закрывает книгу после закрытия Userform .

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

Вы можете легко создать EXE-файл с помощью Visual Studio. Я никогда не слышал, чтобы кто-нибудь использовал Excel для создания файла .exe.

Я создал настольное приложение, используя python в качестве серверной части и Electron JS, интегрированный с Node JS в качестве клиентской части .

На изображении ниже показано дерево файлов моего проекта.

enter image description here

Мне удалось связать питон с Electron JS, используя файл renderer.js , и мои функции приложения, как и ожидалось.

Но у меня вопрос, как мне скомпилировать это приложение Python + Electron JS в exe . Мне известно, что pyinstaller можно использовать для компиляции файлов Python в exe . Пожалуйста, дайте мне знать, как скомпилировать это приложение python + electron JS .

1 ответ

Итак, после небольшого исследования я смог найти решение самостоятельно.

Во-первых, вам нужно преобразовать файл python в один exe с помощью pyinstaller . Команда

Вы найдете engine.exe внутри папки dist . Скопируйте exe в главный каталог, где у вас есть renderer.js . Удалите все остальные папки, связанные с python.

Изначально у меня был файл renderer.js со следующим кодом. sys.argv для ввода и получения вывода с помощью stdout .

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

Ниже приводится измененная версия линии.

Это немного сложно для такого простого случая, но мне потребовалось реализовать 5 классов, чтобы извлечь тело из engine.exe . Вроде бы слишком много для такой простой задачи.

Откройте терминал в папке проекта и выполните следующие команды (одну за другой), чтобы установить electron-packager глобально с помощью npm .

Как только это будет установлено, мы можем использовать следующую команду для упаковки нашего приложения.

pythonElectronApp - это название проекта (вы можете назвать его по своему желанию), --arch=x64 означает 64-битную архитектуру, и --asar упаковывает ваш проект таким образом, чтобы ваш исходный код не был виден пользователю клиента.

Скопируйте созданный нами ранее engine.exe и вставьте его в папку, в которой было создано ваше электронное приложение. В моем случае это pythonElectronApp-win32-x64

Теперь вы можете открыть полнофункциональное приложение python+electron . В моем случае это имя pythonElectronApp.exe

Как вы видели ранее на предыдущем изображении, существует множество зависимостей и папок. Чтобы создать один автономный установщик, такой как .msi для Windows, вы можете использовать такое программное обеспечение, как Inno Setup сделать это за вас.

Читайте также: