Похоже, ночные бдения дали результат. Программа перстала грохаться. И если дело было в том, что я предполагаю, то четыре вечера были пущены псу под хвост из-за последней версии IDL-компилятора, которая неверно генерировала указатель на vtable в случае (согласен, экзотическом), когда наследуемый интерфейс пустой - т.е. не добавлет новых методов. Все это, конечно, сущее блядство, но появляется шанс успеть доделать. Имеем следующие интерфейсы: interface IBase : IDispatch { HRESULT Method_1(); ... HRESULT Method_n(); } interface IDerived : IBase { } IDerived не содержит методов. Зачем нужен такой? Для красоты дизайна, если в двух словах. В общем, нужен был. Все это компилировалось в proxy/stub DLL и работало как часы в течении пяти лет. До той поры, пока я не перекомпилировал все это под Visual Studio 2003. После этого при попытке вызвать любой метод IDerived клиент рушился с access violation. Единственное, что помогло: вставить пустой метод в IDerived: interface IDerived : IBase { HRESULT __noop__(); } Теперь MIDL корректно генерирует код proxy/stub библиотеки. Суки! Суки! Суки! Четыре долгих вечера убил.