ME>Насколько я понял, у тебя грабли в том, что интерфейс и объект, реализующий этот интерфейс имеют один и тот же uuid.
Не совсем, CLSID proxy/stub соответствовал IID'у одного из интерфейсов, предоставляемых сервером [1]. Проблемы была в том, что сервер регистрировал, что он создает объект с таким CLSID. И при попытке создать proxy/stub СОМ определял, что он создается с помощью этого самого сервера... а должен был искать dll в реестре. Я понимаю, что это звучит запутанно, но по другому не получается. Короче мораль — нужно следить, чтобы объекты, которые содержаться в typelib не попадали в proxy/stub.
[1] Это нормальная правктика по умолчанию, меняют CLSID для proxy только в редких случаях, например 2 проекта использующих 1 idl файл.
Вот кусок из msdn, для тех, кто с таким не сталкивался
C-Compiler Definitions for Proxy/Stubs
...
This default registration code uses the GUID of the first interface encountered as the CLSID for registering the entire proxy/stub DLL server. COM later uses this CLSID to locate and load the compiled proxy/stub server for the marshaling of any of the interfaces the server is registered to handle. When an application makes an interface method call that crosses thread, process, or computer boundaries, COM uses the interface identifier registry entry to locate the CLSID registry entry for the proxy/stub marshaling server. It then uses this CLSID to load the server (if it isn't already loaded) so that the interface call can then be marshaled.