|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
|||||||||||
Неразрешенный внешний символ при вызове методов класса в сторонней программе (dll)07.11.2016, 14:46. Показов 2405. Ответов 10
Метки нет (Все метки)
Здравствуйте. Пишу dll для клавиатурного хука. Есть класс, который я написал для работы с файлами. Он прекрасно компилируется в родной программе, но при попытках вызвать методы класса в программе не родственной классу возникают ошибки с неразрешенным внешним символом. Не уверен, что нужен код класса(он рабочий), но скину:
FileWork.h
0
|
|||||||||||
| 07.11.2016, 14:46 | |
|
Ответы с готовыми решениями:
10
Ссылка на неразрешенный внешний символ при использовании DLL Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ Ссылка на неразрешенный внешний символ в шаблоне класса |
|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
||||||||||||
| 07.11.2016, 19:10 [ТС] | ||||||||||||
|
Код dll:
Только сейчас понял, какую хрень я написал в dll, но это не про класс, про хук. P.S. Буду благодарен, если расскажите еще и про хуки(как их правильно устанавливать). Добавлено через 46 минут Мда... Дело точно не в dll. Написал программу:
Ошибка 4 error LNK2019: ссылка на неразрешенный внешний символ "public: bool __thiscall FileWork::Close(void)" (?Close@FileWork@@QAE_NXZ) в функции _main D:\Projects\VS\MiniPrpoj\ZASHKVAR\FileWo rkTest\FileWorkTest\main.obj FileWorkTest Ошибка 3 error LNK2019: ссылка на неразрешенный внешний символ "public: bool __thiscall FileWork::BaseCreate(char *,unsigned long)" (?BaseCreate@FileWork@@QAE_NPADK@Z) в функции _main D:\Projects\VS\MiniPrpoj\ZASHKVAR\FileWo rkTest\FileWorkTest\main.obj FileWorkTest Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall FileWork::FileWork(void)" (??0FileWork@@QAE@XZ) в функции _main D:\Projects\VS\MiniPrpoj\ZASHKVAR\FileWo rkTest\FileWorkTest\main.obj FileWorkTest Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall FileWork::~FileWork(void)" (??1FileWork@@QAE@XZ) в функции "public: void * __thiscall FileWork::`scalar deleting destructor'(unsigned int)" (??_GFileWork@@QAEPAXI@Z) D:\Projects\VS\MiniPrpoj\ZASHKVAR\FileWo rkTest\FileWorkTest\main.obj FileWorkTest Ошибка 5 error LNK1120: неразрешенных внешних элементов: 4 D:\Projects\VS\MiniPrpoj\ZASHKVAR\FileWo rkTest\Debug\FileWorkTest.exe FileWorkTest Добавлено через 46 секунд
0
|
||||||||||||
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 07.11.2016, 19:16 | ||
|
cpp файл в проект-то добавил? PS. Явный вызов деструктора тут не нужен. Используй delete.Добавлено через 2 минуты Алексей_Либанов, по поводу первоначального вопроса - см. тут: https://msdn.microsoft.com/ru-... 27t8c.aspx
0
|
||
|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
|
| 07.11.2016, 19:49 [ТС] | |
|
0
|
|
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 07.11.2016, 20:42 | |
|
Алексей_Либанов, Ну, насколько я понимаю, последний тест свелся к тому, что этот класс использовался в одном проекте, без dll. И там тоже появились ошибки компоновщика. Если это так, то, вероятно, cpp файл забыли добавить в проект (то, что он лежит в папке рядом - ничего не значит, нужно, чтобы система сборки в IDE про него знала). Ну, или, если я не прав, нужно подробнее рассказать в каком сейчас состоянии проект.
Это я так мягко намекаю, что проблемы нынешние и прошлые - это разные проблемы, у них разные причины и делать общие выводы о них обеих - не надо.
0
|
|
|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
|
| 07.11.2016, 21:23 [ТС] | |
|
DrOffset, Еще раз описываю ситуацию, возможно Вы меня не так поняли. Есть родной проект, в котором я писал класс. В нем все линкуется. Я создал другой проект(никак не связанный с проектом в котором я писал класс). В папку этого проекта я закинул FileWork.cpp и FileWork.h, в main.cpp проекта написал #include "FileWork.h". Вопрос: что еще нужно написать/подключить, чтобы в проекте можно было вызывать методы класса?
0
|
|
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|||
| 07.11.2016, 21:41 | |||
|
К сожалению понять можно было по-разному, т.к. информации было дано не совсем достаточно. * Если да, то закидывание cpp - это лишнее, ненужное действие. Вместо этого нужно было предоставить библиотеку импорта (*.lib) и прописать ее в настройках компоновщика. Во-вторых, нужно было пометить соответствующие функции, как и сам класс, как экспортируемые иначе функции не будут видны извне, получим как раз похожие на представленные ошибки компоновщика. Об этом была дана ссылка выше. Вот, если угодно, более подробно: https://habrahabr.ru/post/150327/ https://msdn.microsoft.com/ru-... k134d.aspx https://msdn.microsoft.com/ru-... w9f6x.aspx https://msdn.microsoft.com/ru-... k134d.aspx * Если же класс просто хочется использовать как есть из этого нового проекта, то закидывание cpp файла в папку недостаточно, нужно еще подключить его в дереве проекта. Об этом я пытался сказать выше. Кроме всего прочего, следует помнить, что имена функций и классов в С++ подвержены name mangling`у, что сводит на "нет" возможность взаимодействия (с использованием этих имен) между модулями, созданными в разных компиляторах. Поэтому обычно организуют взаимодействие через переносимый С-интерфейс. Из этого правила есть исключения, но необходимо оставаться в строгих рамках. Пример можно глянуть здесь. Еще хочу заметить, что я пока даже не пытался касаться изначальной проблемы с хуком, т.к. по ней не хватает информации. Я думаю любой, кто соберется ответить, будет благодарен пошаговому описанию действий, в варианте "получилось" и в варианте "не получилось", начиная от компиляции тестового приложения и заканчивая установкой хука в целевую программу.
0
|
|||
|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
|||
| 07.11.2016, 21:58 [ТС] | |||
|
Добавлено через 2 минуты Потом, кстати, планирую переписать класс в dll(но это уже совсем другая история)
0
|
|||
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 07.11.2016, 22:00 | |
Сообщение было отмечено Алексей_Либанов как решение
Решение
1
|
|
|
1 / 1 / 0
Регистрация: 21.02.2015
Сообщений: 126
|
|
| 07.11.2016, 22:11 [ТС] | |
|
Спасибо, от ошибок линковщика я избавился. Но вопрос с ловушками остался. Буду экспериментировать, потому что пока, все сводится к "не работает". Когда выявлю фактическую проблему - напишу. Ну а пока, не мог бы ты скинуть исходник программы для хукинга(если есть), хочу посмотреть, как там все устроено.
P.S. Инфы и интернете вроде много, но по фату, толковых статей по типу "хуки с нуля" практически нет.
0
|
|
| 07.11.2016, 22:17 | ||
|
Не по теме:
По вопросам организации хуков в windows лучше обратиться в этот форум: https://www.cyberforum.ru/win-api/ Начать, наверное, стоит с поиска. Наверняка есть уже примеры.
0
|
||
| 07.11.2016, 22:17 | |
|
Помогаю со студенческими работами здесь
11
В элементарной программе из учебника - error LNK2019: ссылка на неразрешенный внешний символ Создание шаблона класса ( Ошибка: ссылка на неразрешенный внешний символ ) Ошибка неразрешенный внешний символ при подключении curl Ошибка при работе с SFML: LNK2001 неразрешенный внешний символ Ссылка на неразрешенный внешний символ __divti3 (при делении __int128) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|