Не прямой ответ, но он может быть строго связан: как сказано в комментарии, вы должны избегать изменения точки входа таким образом: обычно реальная точка входа берется «поддельным» DllMain, предоставленным CRT, для инициализации его внутреннегоструктуры данных (как объяснено здесь ), так что вы обойдете их.Возможно, уменьшение размера связано с удалением кода инициализации CRT.
Ваша dll работает с неинициализированным CRT, что очень плохо.Вы должны оставить точку входа по умолчанию, что, кстати, должно решить вашу проблему.
Кстати, обратите внимание, что на самом деле вы могли бы сделать dll без CRT (и это стало бы действительно маленьким), но вы не должны использовать CRT вообще , даже не связываясь с ним (переключатель / NODEFAULTLIB ).Это означает, что вы можете просто использовать библиотеки, с которыми вы явно ссылаетесь (например, Windows API), но я подозреваю, что вы потеряете несколько функций C ++ (я думаю, по крайней мере исключения и RTTI).