Как видно из названия, я не могу создать простую DLL. Я использую VS 2017 Community Edition Версия 15.8.0. Вот код.dll:
#include «stdafx.h» #include «InvWin32App.h» #include «$StdHdr.h» void Prc1()
Вот код для заголовка, согласно способу MS делать вещи:
#ifdef INVWIN32APP_EXPORTS #define INVWIN32APP_API __declspec(dllexport) #else #define INVWIN32APP_API __declspec(dllimport) #endif #ifdef __cplusplus extern «C» < #endif INVWIN32APP_API void Prc1(); #ifdef __cplusplus >#endif
Вот код драйвера: (Обновление: Программа драйвера является программой.exe.)
#include «pch.h» #include «InvWin32App.h» int main()
Это не может быть проще, чем это. Я получаю следующее сообщение об ошибке при попытке запустить код:
Unable to start program program name.dll program name.dll is not a valid Win32 application
Я могу создавать программы.exe в порядке. Я также получил ошибку ранее этим утром, когда я запускал VS 2017 версии 15.7.5. Обновление VS не принесло пользы. Я также пытался скомпилировать их как программы.c, но это не имело никакого значения.
EXE не является приложением Win32 в Windows 7 — что делать?
Я пару раз сталкивался с этой проблемой при создании программ.exe с использованием VS 2015. Я не помню, что я делал, но проблема исчезла. Любая помощь будет оценена.
user5635287 15 авг ’18 в 18:23 2018-08-15 18:23
2018-08-15 18:23
3 ответа
Щелкните правой кнопкой мыши проект в обозревателе решений, который является проектом для исполняемого файла, и нажмите «Установить как стартовый проект».
Обратите внимание, что «не является допустимым приложением Win32» не является ошибкой компиляции или ошибкой ссылки, это сообщение, которое вы получаете, когда пытаетесь отладить что-то, что не является исполняемым.
Вы можете запускать только исполняемые файлы. Исполняемые файлы потребляют DLL. Это должны быть два отдельных проекта с двумя наборами соответствующих параметров проекта.
user5191073 15 авг ’18 в 19:57 2018-08-15 19:57
2018-08-15 19:57
Я обнаружил, что для любого, кто присоединяется к вечеринке в это время, эта ошибка возникает, когда вы пытаетесь запустить 32bit dll using a 64bit python .
Теперь я не буду вдаваться в подробности, почему это не сработает, поскольку ответы выше четко описывают это, но для этого есть 2 решения.
- Установите 32-битный питон и используйте его для связи с dll.
- Межпроцессное взаимодействие с использованием библиотеки msl-loadlibдокументации
Я использовал второй шаг, который казался более устойчивым. Шаги, которые я использую ниже, можно найти по ссылке на документацию выше.
- Во-первых, нужно создать серверный модуль, который взаимодействует с 32-битным модулем.
#server.py from msl.loadlib import Server32 class Server(Server32): # the init takes mandatory host and port as arguments def __init__(self, host, port, **kwargs): # using windll since this application is being run in windows, other options such as cdll exists # this assumes that the dll file is in the same directory as this file super(Server, self).__init__(‘tresdlib.dll’, ‘windll’, host, port) # define a function that is to be called with the required arguments def fsl_command(self, com, doc): #the server32 exposes the loaded dll as lib, which you can then use to call the dll functions and pass the required arguments return self.lib.FSL_Command(com,doc)
- Затем мы создаем клиентский модуль, который отправляет запросы Python на серверный модуль.
#client.py from msl.loadlib import Client64 class Client(Client64): def __init__(self): # pass the server file we just created in module32=, the host am using is localhost, leave port as none for self assigning super(Client, self).__init__(module32=’server’, host=»127.0.0.1″, port=None) # define a function that calls the an existing server function and passes the args def fsl_command(self, com, doc): return self.request32(‘fsl_command’, com, doc)
MyProject.dll не является допустимым приложением win32
Я скопировал папку решения C++, написанную с помощью Visual Studio 2013, на свой компьютер и попытался запустить ее (я имею в виду отладку VS) с помощью VS 2022. Решение содержит 5 проектов, но я просто нацелился на один из них, поэтому выгрузил остальные и установил один как проект запуска, и эта ошибка произошла. Изображение ошибки
Файл решения хорошо работает на первом ПК, и проект не является проектом win32, а x64 (я мало что знаю о win32 или x64).
В соответствии с этим вопросом я попытался выбрать проект, установить его в качестве запуска, восстановить VS, установить vcredist_x64, но это не помогло.
После запуска VS создает папку Debug в каталоге решения, а не проект «LP_Dllx64Debug» (LP_Dll — это имя решения) без какого-либо файла .exe, а путь ошибки — это именно эта папка, может быть из этого?
AmirHossein 20 Июл 2022 в 11:41
Библиотека => DLL не может быть запущена. Вам нужен исполняемый файл => EXE. Есть ли в вашем решении проект с функцией main() ?
20 Июл 2022 в 11:42
Итак, что означает эта ошибка? , да, главный проект, о котором мы говорим. на самом деле VS создает папку Debug в каталоге решения, а не в каталоге проекта, не может ли это быть из-за этого?
AmirHossein
20 Июл 2022 в 13:11
По-видимому, все, что вы устанавливаете в качестве стартового проекта, настроено на создание библиотеки, а не исполняемого файла. Мы не можем предоставить больше помощи, чем это
Источник: question-it.com
Не является приложением win32 — что делать?!
Пользователям операционной системы MS Windows иногда приходится столкнуться с ситуацией, когда при попытке запуска исполняемого файла система пишет: Файл или программа не является приложением win32. Что делать в этом случае, чтобы запустить программу?! Вариантов решения проблемы несколько.
Чаще всего причина неприятности кроется в несовместимости запускаемого программного обеспечения с текущей версией Windows. Например, утилита поддерживает только «Семёрку» и более старшие версии, а Вы пытаетесь запустить ещё на «Восьмёрке» или «Десятке».
Обычно в этом случае чтобы исправить ошибку «Файл не является приложением win32», достаточно всего лишь запустить его в режиме совместимости. Для этого кликаем на нём правой кнопкой мыши и выбираем пункт «Свойства»:
На вкладке «Совместимость» нужно будет сначала поставить галочку «Запустить программу в режиме совместимости с:», а затем ниже, в списке операционных систем выбрать ту из них, в который данная программа точно работает без проблем. Нажимаем кнопку «ОК» и снова запускаем приложение. Обычно после этого всё работает «как часы».
Примечание:
1. Если решение не помогает, попробуйте поставить последнюю версию пакетов Microsoft .NET Framework и Visual C++ Redistributable .
2. Причиной появления ошибки EXE-файла «Не является приложением win32» может быть и результат работы вируса. Проверить это можно вот как. Нажмите комбинацию клавиш Win+R, введите команду regedit и нажмите кнопку «ОК». Появится окошко редактора реестра, в котором откройте ветку:
В правой части редактора должны быть отображены два параметра:
У обоих должно быть значение «%1» %*. Если прописано что-то иное — измените значение на правильное и перезагрузите операционную систему.
Не дружите с реестром — воспользуйтесь приложением AVZ:
3. Если ничего из перечисленного не помогло — искренне сожалею, но скорее всего Ваш исполняемый EXE-файл испорчен. Попробуйте скачать его из другого источника, либо найти другую версию — иногда это очень даже помогает.
Источник: set-os.ru