23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
1

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

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

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

Код:

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2014, 17:37
Ответы с готовыми решениями:

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

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

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

Что не так в статической библиотеке
Создание статической библиотеки : Посмотрите пожалуйста ,что у меня не правильно в файле...

2
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2014, 18:13 2
Цитата Сообщение от Nelkor Посмотреть сообщение
Казалось бы, решение такой проблемы легко - в свойствах проекта изменить пункт "Использование MFC" на "Использовать MFC в статической библиотеке"
в вашей программе MFC не используется.
а вот C Runtime Library используется по умолчанию, чтобы скомпоновать её статически нужно выставить опцию в MT
http://msdn.microsoft.com/en-u... t1wy3.aspx
0
23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 23:09  [ТС] 3
Спасибо, вопрос решен!
0
05.07.2014, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2014, 23:09
Помогаю со студенческими работами здесь

шаблонный метод в статической библиотеке
подскажите, имеется след. архитектура кода: myclass.h class myclass { public:...

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

Статический объект в статической библиотеке не создается
Есть статическая библиотека. В ней статически создаю синглтон: static Singleton &amp;data =...

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru