代码之家  ›  专栏  ›  技术社区  ›  Stefan Steiger Marco van de Voort

C++设置功能?

  •  1
  • Stefan Steiger Marco van de Voort  · 技术社区  · 16 年前

    C++中类似JavaScript的StimeTimeOutlook函数最便宜的方法是什么?

    我需要这个: 5000毫秒后,启动函数xy(无参数,无返回值)。

    这样做的原因是我需要初始化COM以便进行文本到语音转换,但是当我在dll附加上进行此操作时,它会崩溃。

    但是,如果我不从dllmain调用coInitialize,它就可以正常工作。

    我只需要调用CoInitialize和CoCreateInstance,然后在其他函数中使用该实例。我可以通过检查空值来捕获未初始化的实例,但我需要初始化COM-而不会崩溃。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Len Holgate    16 年前

    打电话 CoInitialize() DllMain() 这是一件不好的事情;你可以做的事情有很多限制 DLL主() 见这里: http://blogs.msdn.com/larryosterman/archive/2004/04/23/118979.aspx

    即使它确实工作可靠,然后从内部初始化COM DLL主() 当每个线程都初始化了COM,并且您不知道应用程序本身希望如何处理您要为其初始化COM的线程的COM单元时,这不是一件特别好的事情…这意味着您可以用一种方式初始化COM,然后应用程序可能需要用另一种方式初始化它,并可能由于您的DLL所做的操作而失败…

    你可以把线旋进 DLL主() 只要你小心(看这里 http://blogs.msdn.com/oldnewthing/archive/2007/09/04/4731478.aspx )然后在该线程上初始化COM,并在该线程上完成所有与COM相关的工作。您需要将使用COM所需的任何数据从被调用的任何线程整理到自己的COM线程,并从那里进行COM调用…

    还有一个问题是,您创建的COM对象的实例(您是否能够可靠地执行您想执行的操作)是否可以从调用到DLL以进行调用的线程中使用…如果需要的话,您确实了解如何封送接口指针,等等?

    或者,您应该通过COM公开您的功能,然后让应用程序将您的DLL作为COM DLL加载,一切都会正常工作。您可以指定您需要的公寓类型,应用程序负责为您正确设置。

    总之,你不需要回答你的问题。

        2
  •  0
  •   Rudi    16 年前

    如果可以完全停止执行5秒,则可以使用 Winapi Sleep 功能。注意,睡眠意识文档中可能存在一些与CoInitialize和消息有关的问题。