This article was contributed by Shahar Prish . It's hard to keep the code binary compatible. It's quite a drag since you will have to change code in several places for each method or property you add and you may not always know what to change.
Wrappers have to be recreated when a control is updated etc.
IDispatch, your heart has most probably blackened from the amount of work done there for a simple call. All this is removed when using a dual interface since the call is a direct one. By the way - for some reason, VB still does not use dual interfaces when calling controls. Each new method requires alot of places to be updated, plus custom interfaces in MFC are not too friendly. However, this does raise the amount of work needed, and raises it considerably when your control does alot of graphic work or other work for which MFC provides ample support and ATL provides bubkis.