Sorry for not replying to your post, I completely forgot about it.
It sounds as though you are just learning about COM and it's associated functionality. This can be very difficult, because, typically, all you need to do is ignore one aspect of the creation and activation paradigm, and the whole thing just fails to operate as expected (and, you have no idea why).
When I was first trying to understand COM (syntax and the reasons it was designed in such a way), I found that reading Don Box's book: Essential COM was extremely helpful. You need an overview, and you need to understand why COM does what it does, and, to read some example source code.
As I recall, there are some excellent articles right here on the CodeProject about registering a COM server. Also, you don't mention how your COM client activates the object,...this is typically done with CoCreateInstance.
This is an excellent introductory series to COM: The COM Macro-Architecture Topology,
...and,...COM Macro Architecture Topology - Servers,
...and,...COM Macro Architecture Topology - Clients,
and,...COM IDs & Registry Keys in a Nutshell.
...Also, Michael Dunn has an excellent series on COM: Introduction to COM - What It Is and How to Use It., and,...
Introduction to COM Part II - Behind the Scenes of a COM Server
Several incredibly informative articles about COM are written by: Lim Bio Liong
Understanding The COM Single-Threaded Apartment Part 1,
...and,...Understanding The COM Single-Threaded Apartment Part 2
Jeff Glatt also has an excellent series: COM in plain C
COM in plain C, Part 2
COM in plain C, Part 3
COM in plain C, Part 4
COM in plain C, Part 5
COM in plain C, Part 6
COM in plain C, Part 7
...and, COM in plain C, part 8
In fact,...there is a HUGE list of CodeProject articles about COM: COM / COM+
modified 5-Aug-14 18:40pm.