Ответ 1
.lib содержит заглушки для функций и т.д., которые экспортируются DLL. Вы связываете .lib в EXE, и теперь ваш EXE знает, как вызвать функции. Но, конечно, там нет никакой функции - звонки никуда не делись. Во время загрузки, когда операционная система загружает ваш EXE, она также загружает вашу DLL, а затем исправляет EXE - где EXE вызывает в заглушку, загрузчик заменяет это вызовом в реальную функцию в DLL.
Обычно вам не нужно отправлять .lib своим клиентам. Однако, если ваши клиенты хотят писать свои собственные EXE, которые используют вашу DLL, тогда вам нужно будет отправить их .lib, чтобы они могли связать свой EXE с ней.
Ошибка компоновщика LNK1107 означает, что вы пытались ссылаться на DLL, а не на .lib. Это всегда неправильно, потому что по определению DLL динамически связана во время выполнения, а не статически во время сборки.