Не совсем уверен, что вы спрашиваете, но:
На самом деле не имеет значения, какой вариант вы используете, это просто вопрос того, что волшебник делает для вас; если вы используете третью опцию, мастер создаст бит в вашем заголовочном файле, который выглядит следующим образом:
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
Способ, которым это работает, заключается в том, что в проекте DLL TEST_EXPORTS определяется в параметрах компилятора, поэтому TEST_API оценивает dllexport, тем самым сообщая компоновщику экспортировать эти символы. Если вы включаете этот заголовок в другой проект, он определяет TEST_API как dllimport, который указывает компилятору ссылаться на него во время выполнения в DLL. Этот #define метод экспорта символов широко используется и легко читается.
Чтобы вызвать функцию / класс внутри DLL, вам нужно экспортировать символы одним из двух способов:
а) использование __declspec (dllexport) [это кажется более удобным вариантом почти во всех случаях] ИЛИ
б) использование файла .DEF в вашем проекте
Также хотелось бы отметить, что вам нужно включить либо проект DLL в ваше решение для файла .exe, либо .lib, сгенерированный компиляцией DLL.