怎样获取当前线程所处的COM线程模型呢?(是STA还是MTA)

解决方案 »

  1.   

    HRESULT hr = CoInitialize(NULL);
    if (hr == S_OK) // 线程还没有执行COM初始化
    {
      CoUninitialize();
    }
    else if (hr == S_FALSE) // 线程已初始化为STA
    {
      CoUninitialize();
    }
    else // if (hr == RPC_E_CHANGED_MODE) // 线程已初始化为MTA
    {
    }
      

  2.   

    在线程的局部存储中有没有关于COM套间的信息呢??
      

  3.   

    为什么取不到啊??既然CoInitialize可以判断已进入套间,我想应该有相应的函数可以帮忙的,但就是找不到
      

  4.   

    没错,CoInitialize可以判断,但这是系统API,内部过程是不开放的,也确实没有别的API来判断,因为CoInitialize的返回值就能帮你判断出来。
      

  5.   

    可以在注册表的HKEY_CLASSES_ROOT\CLSID\{Class ID of the COM component} \InProcServer32 下查看到该COM的线程模式。如果该值是Apartment,则说明该COM只能以STA模式运行。其他的值有Free(MTA),Both(STA+MTA),Single(只能在一个单一的线程中执行)。