QBziZ 'ответ достаточно правильный. См. Неуправляемые библиотеки DLL в C ++
Чтобы завершить это: В C ++, если вам нужно использовать символ, вы должны сообщить компилятору о его существовании, а часто и его прототипе .
На других языках компилятор просто исследует библиотеку самостоятельно и найдет символ et voilà .
В C ++ вы должны сообщить компилятору.
См. Заголовок C / C ++ как оглавление книги
Лучший способ - поместить в какое-то общее место необходимый код. «Интерфейс», если хотите. Обычно это делается в заголовочном файле, который называется header, потому что обычно это не независимый исходный файл. Заголовок - это всего лишь файл, целью которого является включение (т.е. копирование / вставка препроцессором) в настоящие исходные файлы.
По сути, кажется, что вам нужно дважды объявить символ (функцию, класс, что угодно). Это почти ересь по сравнению с другими языками.
Вы должны увидеть это как книгу, со сводной таблицей или указателем. В таблице у вас есть все главы. В тексте у вас есть главы и их содержание.
А иногда вы просто счастливы, что у вас есть список глав.
В C ++ это заголовок.
А как насчет DLL?
Итак, вернемся к проблеме с DLL: цель DLL - экспортировать символы, которые будет использовать ваш код.
Таким образом, на языке C ++ вы должны одновременно экспортировать код при компиляции (т. Е. В Windows, например, использовать __declspec) и «опубликовать» таблицу экспортируемого (т. Е. Иметь «публичные» заголовки, содержащие экспортируемые декларации).