clude <windows.h>
typedef int (WINAPI* MB) (HWND,LPCTSTR,LPCTSTR,UINT);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MB fMessageBox;
HMODULE user32_dll = LoadLibraryA("user32.dll");
if (user32_dll)
{
fMessageBox = (MB)GetProcAddress(user32_dll,"MessageBoxA");
fMessageBox(0, (LPCTSTR)"test", (LPCTSTR)"Сообщение", MB_OK|MB_SETFOREGROUND);
FreeLibrary(user32_dll);
}
return 0;
}
Устранение зависимостей
"Приложению не удалось запуститься, поскольку оно неправильно настроено. Повторная установка может исправить эту проблему"
Понятное дело что нужно устранить все зависимости и подключить всё нужное. Я как то делал и размер файла с 14kb увеличивался до 54kb и тогда всё начанало работать. Подскажите как решить проблему.
Использовал только winapi и самописные функции, но всё равно не помогает.
Ну думается мне что помимо winAPI ты все же юзал и C рантайм. да хотябы те же new/delete. Он и может конфликтовать как раз.
Код:
Решил проблему уже
Отключаю манифест: Project Property->Linking->Manifest File->Generating Manifest->NO
спасибо Great за совет
Далее выбираю: Project Property->General Configuration->Character Set->Use Multi-byte Character Set это ставлю чтобы не писать (LPCTSTR)"test" а просто "test" в функции
Рантайм библиотеки:Project Property->Configuration properties->c/c++->code generation->runtime library->MT
После компиляции код файл получился размером 45kb
Кое что добавил в код и он после компиляции стал 2kb, а после сжатия WinUPack-ом стал вообще 1kb
Код:
#include <windows.h>
#pragma optimize( "gsy", on )
#pragma comment( linker, "/ENTRY:WinMain" )
#pragma comment( linker, "/MERGE:.rdata=.data" )
#pragma comment( linker, "/MERGE:.text=.data" )
#pragma comment( linker, "/SECTION:.text,EWR" )
#pragma comment( linker, "/SUBSYSTEM:WINDOWS" )
#pragma comment( linker, "/INCREMENTAL:NO" )
typedef int (WINAPI* MB) (HWND,LPCTSTR,LPCTSTR,UINT);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MB fMessageBox;
HMODULE user32_dll = LoadLibraryA("user32.dll");
if (user32_dll)
{
fMessageBox = (MB)GetProcAddress(user32_dll,"MessageBoxA");
}
fMessageBox(0, "test", "Сообщение", MB_OK|MB_SETFOREGROUND);
FreeLibrary(user32_dll);
return 0;
}
#pragma optimize( "gsy", on )
#pragma comment( linker, "/ENTRY:WinMain" )
#pragma comment( linker, "/MERGE:.rdata=.data" )
#pragma comment( linker, "/MERGE:.text=.data" )
#pragma comment( linker, "/SECTION:.text,EWR" )
#pragma comment( linker, "/SUBSYSTEM:WINDOWS" )
#pragma comment( linker, "/INCREMENTAL:NO" )
typedef int (WINAPI* MB) (HWND,LPCTSTR,LPCTSTR,UINT);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MB fMessageBox;
HMODULE user32_dll = LoadLibraryA("user32.dll");
if (user32_dll)
{
fMessageBox = (MB)GetProcAddress(user32_dll,"MessageBoxA");
}
fMessageBox(0, "test", "Сообщение", MB_OK|MB_SETFOREGROUND);
FreeLibrary(user32_dll);
return 0;
}
Такая ошибка выдается в случае несоответствия версий c++ рантайм библиотек, все что нужно было сделать это обновить их на клиентской машине. вот редист для приложений скомпилированных 2005 студией:
x86:
http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en
x64:
http://www.microsoft.com/downloads/details.aspx?familyid=90548130-4468-4BBC-9673-D6ACABD5D13B&displaylang=en
А если без редистра. Вот стоит голая винда XP Pro SP1 и я что не могу запустить написанное мной приложение чтоли??? На асме то если напишу то всё запустится ведь, а на С++ не могу чтоли?
ну тогда путь добрый в эру доса :)