Вызвать неэкспортированные функции, которые определены в том же модуле (DLL / EXE), что и ваш код, легко: просто вызовите их, как любую другую функцию C ++. Очевидно, это не то, о чем вы спрашиваете. Если вы хотите вызывать неэкспортированные функции в другом модуле, вам нужно как-то узнать их адреса.
Один из способов сделать это - заставить первый модуль вызывать экспортированную функцию во втором модуле, который возвращает указатель на функцию. (Или: структура, содержащая указатели на функции, указатель на экземпляр класса и т. Д.) Шаблон фабрики Think.
Другой способ - экспортировать функцию регистрации из первого модуля и вызывать код инициализации второго модуля, передавая ей указатели на неэкспортированные функции вместе с некоторой идентифицирующей информацией. (Лучше также иметь соответствующую функцию отмены регистрации, которая вызывается перед выгрузкой второго модуля.)
Еще один способ - разбираться с символами отладки, используя dbghelp.dll
. Это не было бы рекомендовано для реального приложения, потому что это потребовало бы распределения символов отладки и было бы чрезвычайно медленным, не говоря уже о чрезмерно сложном.