void Test()
  {
    Device_Init();
    Device_Destroy();
  }
这是不可能的

解决方案 »

  1.   


    但是这是客户需求,也是SDK的需求。
    客户甚至可能在DLLMain等函数中调用这个Device_Init/DeviceDestroy呢,这个还是最麻烦的,不过这个不是SDK的规定,可以协商.还请各位帮忙。
      

  2.   

    可以这样:
    Device_Init( int a ); // a=0, sdk, a=1, com
      

  3.   

    SDK是接口规范,不是我定的,不能乱改的!
    不过我想只要能知道现有的Apartment模型就可以了,实在不行,可以使用强制方法来做.
    对于所有SDK函数都使用这样的宏:#define COM_MODEL_START {BOOL _bHasDepartment=FALSE;\
           if(CoInitializeEx(NULL,COINIT_MULTITHREADED)\
              ==RPC_E_CHANGED_MODE) _bHasDepartment =TRUE;
               
    #define COM_MODEL_END if(_bHasDepartment) CoUninitialize();}
      
    一个例子:
    DLLEXPORT DEVICE_RESULT Device_Init()
    {
      DEVICE_RESULT rv=DEVICE_OK;
      HRESULT hr;
      
      COM_MODEL_START
      //do something here
      COM_MODEL_END 
      return rv;
    }但是这样做,对于DllMain的调用方法还是会有问题,看来这个问题只能和资方协商才能做到!
      

  4.   

    UP!
    我们如何知道当前线程的Apartment模型?