调用 CoInitializeEx(NULL,COINIT_MULTITHREADED); 后 CFileDialog 出了问题:
刚打开CFileDialog时正常,当切换文件扩展名时,文件或文件夹不能自动出现,要刷新或回车后才能出现,用 
CoInitializeEx(COINIT_APARTMENTTHREADED),
CoInitializeEx(COINIT_DISABLE_OLE1DDE),
CoInitializeEx(COINIT_SPEED_OVER_MEMORY).
都不会出现这些问题。可是 OPC 程序必需要用 CoInitializeEx(NULL,COINIT_MULTITHREADED); 初始化啊,请高手赐教!

解决方案 »

  1.   

    COINIT_MULTITHREADED 
    Initializes the thread for multi-threaded object concurrency (see Res). 
    COINIT_APARTMENTTHREADED 
    Initializes the thread for apartment-threaded object concurrency (see Res). 
    COINIT_DISABLE_OLE1DDE 
    Disables DDE for Ole1 support. 
    COINIT_SPEED_OVER_MEMORY 
    Trades memory for speed. 看注释应该用 COINIT_APARTMENTTHREADED 就可以了,没有必要一定用 COINIT_MULTITHREADED 
      

  2.   

    to 38062708(一个人始终不快乐) 一般的程序用 COINIT_APARTMENTTHREADED 当然可以,但该软件必须要用 COINIT_MULTITHREADED 初始化的。做过工控上的 OPC 程序的人就知道了。不管怎么样,谢谢了,结贴时一定给分,呵呵!急啊,在线等,回者有分。
      

  3.   

    如果必须使用CoInitializeEx(NULL,COINIT_MULTITHREADED);那么你必须自己负责marshaling. 至于这是怎么影响到CFileDialog的,没有想过,看上去好像不合理. 不过如果真是这样,而你又不会marshaling,有一个小技巧可以救你,新建一个线程去负责处理CFileDailog,在线程的起始处叫
    CoInitialize(NULL);就可以了.