Есть два С++ модуля ("проекта") под одним Solution-ом, 1-й и 2-й. Во 2-м есть класс, метод которого мы хотим вызвать из первого. Оба модуля - динамические DLL. Не линкуется. Объявляем метод виртуальным - всё замечательно. Если не линкуется и после этого - скорее всего, в Project Dependencies для первого модуля, не указан второй модуль.
Как надо: метод класса делаем доступным, добавляя __declspec(dllexport) (между типом возвращаемого значения и именем функции), после чего метод доступен "снаружи". Другой способ - через .DEF файл, но он менее удобен.
Что происходит: после добавления __declspec, помимо DLL файла, для 2-го модуля компилятор создаст LIB файл - как "связующее звено", с помощью которого слинкует вызов метода из 1-го модуля с реализацией (адресом) метода во 2-м модуле. Данный LIB файл является так называемой "import library".
Глянув в настройках 1-го модуля в MSVC (Linker) в command-line, можно заметить, что при корректно выставленной зависимости 1-го модуля от 2-го, среди аргументов присутствует LIB файл 2-го модуля, даже несмотря на то, что он является динамической библиотекой.
Для вызова метода из статических библиотек, дополнительных действий не потребуется - адреса методов фиксированы и известны линковщику. Тем не менее, не стоит забывать правильно расставить зависимости модулей друг от друга (через свойства Solution).
Чуть больше подробностей, с небольшим примером кода, по ссылке.
Как надо: метод класса делаем доступным, добавляя __declspec(dllexport) (между типом возвращаемого значения и именем функции), после чего метод доступен "снаружи". Другой способ - через .DEF файл, но он менее удобен.
Что происходит: после добавления __declspec, помимо DLL файла, для 2-го модуля компилятор создаст LIB файл - как "связующее звено", с помощью которого слинкует вызов метода из 1-го модуля с реализацией (адресом) метода во 2-м модуле. Данный LIB файл является так называемой "import library".
Глянув в настройках 1-го модуля в MSVC (Linker) в command-line, можно заметить, что при корректно выставленной зависимости 1-го модуля от 2-го, среди аргументов присутствует LIB файл 2-го модуля, даже несмотря на то, что он является динамической библиотекой.
Для вызова метода из статических библиотек, дополнительных действий не потребуется - адреса методов фиксированы и известны линковщику. Тем не менее, не стоит забывать правильно расставить зависимости модулей друг от друга (через свойства Solution).
Чуть больше подробностей, с небольшим примером кода, по ссылке.