Два разных варианта использования:
1) Вы определяете реализацию класса в dll. Вы хотите, чтобы другая программа использовала класс. Здесь вы используете dllexport при создании класса, который вы хотите, чтобы dll выставлял.
2) Вы используете функцию, предоставляемую DLL. Вы включаете заголовок, поставляемый с DLL. Здесь заголовок использует dllimport, чтобы ввести реализацию, которая будет использоваться текущей программой.
Часто один и тот же заголовочный файл используется в обоих случаях и определяется макросом. Конфигурация сборки определяет макрос для импорта или экспорта в зависимости от того, что ему нужно.