jjzjj

CoInitializeEx

全部标签

go - CoInitializeEx(COINIT_MULTITHREADED) 和使用 WMI 的协程

我们有一个用Go编写的监控代理,它使用许多goroutines从WMI收集系统指标。我们最近发现当go二进制文件在Server2016或Windows10(也可能在其他使用WMF5.1的操作系统上)上运行时,程序会泄漏内存。在为reproducetheissue创建最小测试用例之后似乎仅当您对ole.CoInitializeEx方法进行大量调用时才会发生泄漏(WMF5.1中可能发生了一些变化,但我们无法在同一系统上使用pythoncomtypes包重现该问题)。我们在应用程序中将COINIT_MULTITHREADED用于多线程单元(MTA),我的问题是:因为我们从各种goroutin

c++ - CoInitializeEx 用于 boost::test::unit_test

前几天,我决定需要了解Windows平台上C++的测试驱动开发(使用VisualStudio2010Premium)。在决定试用boost的单元测试框架之前,我环顾四周。我应该说我选择了boostpro.com的版本(如果我没记错的话,当前版本是1.44)。这有一个静态库的构建,所以我不在我的测试中使用DLL。Boost的单元测试文档谈到将代码与测试套件分开,这似乎很合理。但随后您必须处理从现在独立的测试套件项目中引用代码的问题。所以我有一个要测试的库项目(但我仍然不确定如何编写可以引用.exe项目的测试...)所以我在我的解决方案中创建了一个单独的项目,称为单元测试。我添加了以下代码

c++ - 为什么我可以在没有调用 CoInitializeEx 的情况下调用 StringFromCLSID?

我正在通过C++学习COM。来自MSDN:ApplicationsarerequiredtouseCoInitializeExbeforetheymakeanyotherCOMlibrarycallsexceptformemoryallocationfunctions.内存分配函数在我看来是CoTaskMemAlloc和CoTaskMemFree。但我明白了,无论是否调用CoInitializeEx和CoUninitialize函数,我的“HelloWorld”都能正常工作。在我的代码中,我使用了在combaseapi.hheader中声明的StringFromCLSID函数。所以,在

c++ - 在 COM 对象内部调用时 CoInitializeEx 返回 S_OK

前段时间,我不得不修改一个旧的COMDLL(VisualC++2010,ATL),将它从“Apartment”线程模型迁移到“Both”,即现在可以从STA和MTA线程调用它而无需序列化调用(当然,我必须为共享数据添加内部同步)。当我的DLL通过Interop从.NET应用程序调用时(我必须支持STA和MTA,即使在.NET应用程序中),这又导致将COM事件(连接点)转换为.NET事件时出现问题。为了解决这些问题,我改变了触发事件的方式。1)如果在STA上下文中调用DLL,它会像以前一样工作,即它创建一个不可见的窗口,然后,当必须引发事件时,它调用该窗口的PostMessage,然后主

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

我正在尝试将一些OpenCV功能集成到我的应用程序中。目前,我已使用DirectShow设置代码以从我的相机获取视频源,然后将其显示在MFC窗口中。此代码无法更改或删除。代码运行完全正常,但无论位置如何,我都会放置以下代码行:IplImage*img=cvLoadImage("C:/well.jpg");网络摄像头无法正确初始化并中断程序。更直接地说,我在以下位置得到失败的HRESULT:CoInitializeEx(NULL,COINIT_APARTMENTTHREADED)更具体地说,在我的代码中的某个时刻,我调用了CDialog::doModal(),然后调用了CoInitial