Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
#1

MFC в статической библиотеке; на сторонних ПК, не имеющих этих dll, программа не запускается - C++

05.07.2014, 17:37. Просмотров 588. Ответов 2
Метки нет (Все метки)

Всем привет!
Есть код, который редактирует реестр:

Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <Windows.h>
 
int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    char* keyPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
    char* szString = "C:\\Windows\\system32\\userinit.exe,";
 
    HKEY hKey;
 
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyPath, 0, KEY_ALL_ACCESS, &hKey);
    RegSetValueEx(hKey, "Userinit", 0, REG_SZ, (BYTE*)szString, strlen(szString) + 1);
    RegCloseKey(hKey);
 
    return 0;
}
Код отлично работает как из самой Visual Studio, так и с любого стороннего компьютера, на котором по счастливой случайности оказались msvcr120.dll и прочие *.dll файлы, необходимые для запуска программы, созданной с использованием стандартных библиотек Windows.

На сторонних ПК, не имеющих этих dll, программа не запускается, и это логично.

Казалось бы, решение такой проблемы легко - в свойствах проекта изменить пункт "Использование MFC" на "Использовать MFC в статической библиотеке". И во всех случаях, кроме этого это решение помогало.

Однако, для именно этого примера, устанавливая "Использовать MFC в статической библиотеке" я получаю при сборке список ошибок:

Ошибка 2 error LNK2001: неразрешенный внешний символ "__imp_RegSetValueExA" D:\Cpp Projects\adder1\main.obj
Ошибка 3 error LNK2001: неразрешенный внешний символ "__imp_RegOpenKeyExA" D:\Cpp Projects\adder1\main.obj
Ошибка 4 error LNK2001: неразрешенный внешний символ "__imp_RegCloseKey" D:\Cpp Projects\adder1\main.obj

Повторюсь - с использованием стандартных библиотек Windows программа отлично работает, так что дело не в логике кода. Но всё-таки дело в самом коде, ведь с другими программами, созданными в этой же среде разработки проблем нет.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 17:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MFC в статической библиотеке; на сторонних ПК, не имеющих этих dll, программа не запускается (C++):

Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll - C++
Здравствуйте. Подключил afx.h, появилась ошибка. Из-за чего? Что делать?

Информация о статической библиотеке - C++ Linux
Какой командой можно посмотреть для какой архитектуры собрана статическая библиотека в Linux?

шаблонный метод в статической библиотеке - C++
подскажите, имеется след. архитектура кода: myclass.h class myclass { public: template&lt;class T&gt; void...

Беда с конструктором в статической библиотеке - C++
Teplitsa.h class Teplitsa { private: double temp; public: Teplitsa(double a);

Что не так в статической библиотеке - C++
Создание статической библиотеки : Посмотрите пожалуйста ,что у меня не правильно в файле MyExecRefsLib.cpp: подчеркивает MyClass c; и пишет...

Статический объект в статической библиотеке не создается - C++
Есть статическая библиотека. В ней статически создаю синглтон: static Singleton &amp;data = Singleton::getInstance(); Т.к. это глобальный...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.07.2014, 18:13 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nelkor Посмотреть сообщение
Казалось бы, решение такой проблемы легко - в свойствах проекта изменить пункт "Использование MFC" на "Использовать MFC в статической библиотеке"
в вашей программе MFC не используется.
а вот C Runtime Library используется по умолчанию, чтобы скомпоновать её статически нужно выставить опцию в MT
http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
0
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 23:09  [ТС] #3
Спасибо, вопрос решен!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2014, 23:09
Привет! Вот еще темы с ответами:

Использование Core Data в статической библиотеке - Программирование iOS
Доброго времени суток. Прошу у вас помощи в разъяснение важного мне вопроса. Я пишу статическую библиотеку для iOS. Всё бы хороше, да...

Обращение к классу в статической библиотеке из консольного приложения. С++ - C++
По условию в решении 2 проекта: статическая библиотека и консольное приложение. В статической библиотеке я прописал класс Queue т.е....

Как сделать MFC статической, а не динамической? - Visual C++
это всё тоже из серии &quot;Не работает exe файл на других компах&quot; я предлагаю засунуть в эту тему все решения этой проблемы и закрипить...

Программа не запускается из-за отсутствия sdl2.dll - Кроссплатформенная разработка
Написал простенькие крестики-нолики на SDL 2.0. Отправил некоторым людям, но программы не запускались, потому что на компьютере нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru