Вы можете сделать это автоматически в Visual Studio, чтобы пользователь вашей DLL не мог этого забыть. Типичный заголовочный файл DLL может выглядеть так:
#undef MYEXPORTS
#ifdef BUILDING_MYDLL
# define MYEXPORTS __declspec(dllexport)
#else
# define MYEXPORTS __declspec(dllimport)
# pragma comment(lib, "mydll.lib")
#endif
MYEXPORTS void SomeFunction();
// etc..
Директива #pragma внедряет опцию компоновщика в файл .obj, который гарантирует, что компоновщик всегда ищет .lib, когда клиентская программа #include заголовочный файл. Это тот же механизм, с помощью которого он всегда ищет правильную версию CRT-файла .lib, даже если вы никогда не упоминаете об этом в настройке «Дополнительные зависимости». В остальном это нестандартно, но использование DLL в любом случае нестандартно.