So we're back to my original question of how you are releasing the smart pointer.

[Note to self]Why does it take so long to pry info out of some posters?[/Note to self]

The code that you posted doesn't tell me anything on where you are releasing the com pointers because you don't show that part of the code.
Code:
class Worker{
  Worker(){}
  void operator()(void)
  {
     CoInitialize(NULL);

     // init skype api dll
     
     while(true){
          // skype api procedures using Skype4COM.dll
     }

     CoUninitialize();
  }
};
If you create the COM smart pointer where you have "// init skype api dll", then CoUnitialize is called before the smart pointer goes out of scope.

But rather than me guessing, can you just post the entire code?