gpt4 book ai didi

c++ - 调用 OpenCV 方法 cvLoadImage() 时 CoInitializeEx 失败

转载 作者:可可西里 更新时间:2023-11-01 14:08:01 33 4
gpt4 key购买 nike

我正在尝试将一些 OpenCV 功能集成到我的应用程序中。目前,我已使用 DirectShow 设置代码以从我的相机获取视频源,然后将其显示在 MFC 窗口中。此代码无法更改或删除。

代码运行完全正常,但无论位置如何,我都会放置以下代码行:

IplImage *img = cvLoadImage("C:/well.jpg");

网络摄像头无法正确初始化并中断程序。

更直接地说,我在以下位置得到失败的 HRESULT:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)

更具体地说,在我的代码中的某个时刻,我调用了 CDialog::doModal(),然后调用了 CoInitializeEx(),从而使程序失败。

有人知道这里发生了什么吗?

最佳答案

如果线程之前被初始化为不同的单元,CoInitialize 将失败,即,如果之前有 CoInitializeEx(NULL, COINIT_MULTITHREADED)

我猜 OpenCV 会调用 CoInitializeEx(NULL, COINIT_MULTITHREADED),导致您对 CoInitializeEx 的后续调用失败。您可以通过检查 CoInitializeEx 的返回来确认这一点 - 在这种情况下它将是 RPC_E_CHANGED_MODE。

没有直接的修复方法,最直接的方法是将 OpenCV 调用移动到一个单独的线程中。

关于c++ - 调用 OpenCV 方法 cvLoadImage() 时 CoInitializeEx 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736782/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com