In Delphi 2009 and C++Builder 2009 (AKA Tiburon) by default the main thread of a VCL application will be apartment threaded. Take a look at TApplication.Create for the details. This isn't really a change from previous versions of VCL but the location of the call and how to override it is new. And now VCL calls OleInitialize instead of CoInitialize so there is a slight behavior change.
There may be reasons why a developer won't want this default behavior and the best way of doing this is to create this unit:
unit InitCom; interface implementation uses ActiveX; var NeedToUninitialize: Boolean; initialization NeedToUninitialize := Succeeded(CoInitializeEx(nil, COINIT_MULTITHREADED)); finalization if NeedToUninitialize then CoUninitialize; end.
And place it in the .dpr as the first unit (it must be before Forms or anything that brings in Controls).
It isn't recommended to run any UI under a multithreaded apartment but this will allow those who need it to change the default threading model.
Here is a blog post by Raymond Chen about why running the UI thread as multithreaded isn't a good idea.