So, I am having this following snippet which attempts to start Microsoft Powerpoint through the win32api:

```
import threading
import win32com.client
import sys

class myDemo(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        try:
            myObject = win32com.client.Dispatch("Powerpoint.Application")
            print "OK"
        except:
            print "Failed to start Powerpoint!"
            sys.exit(1)            
        print "Now attempting to shutdown..."
        try:
            myObject.quit()
        except:
            print "Error"

if __name__ == "__main__":
    test = myDemo()
    test.start()

```

The problem is that it fails and I have no clue why.
However, if I change the last line to `test.run()` it will launch successfully.
So again why is this failing with `test.start()`?

Why is this happening and how should I solve it considering I need Powerpoint to run on a seperate thread asynchronously?

Thanks in advance.

EDIT: Apparently my question is somehow related to this: <http://python.6.x6.nabble.com/Dispatch-error-CoInitialize-has-not-been-called-td1951088.html> 

However apart from the proposed proper solution no one seems to answer why exactly COM is behaving this way.