Вы правы сделать C ++ (без MFC) DLL. Вы можете создать свои классы и те точки входа, которые вы определили, будут экспортированы из этой DLL для использования другим кодом C ++ (например, приложением Win32, написанным на C ++).
Поскольку имена C ++ автоматически искажаются компилятором в странные и замечательные значения, экспортировать их непрактично, как если бы клиенты DLL, например, были C-программами. Но если все в C ++, вы должны быть в порядке.
Если вы создаете несколько классов, вы можете выбрать их динамическое связывание (в виде DLL), но вам потребуется библиотека импорта (созданная для вас автоматически), которая содержит определения символов DLL. Вы также можете выбрать статическую ссылку на свой код из приложения - в этом случае вы получите статическую библиотеку (также .LIB), которая содержит фактический объектный код в ваших классах, а не символы в DLL.
Преимущество DLL, конечно, в том, что если вы пишете несколько приложений, используя вашу библиотеку, все они могут совместно использовать DLL; со статической библиотекой каждый из них будет содержать копию кода вашей библиотеки.