c ++ - CoInitializeEx fejler, når du kalder OpenCV-metode cvLoadImage ()

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at integrere nogle OpenCV-funktionaliteter i min applikation. I øjeblikket har jeg en kode oprettet med DirectShow for at få et videofeed fra mit kamera, som derefter vises i et MFC-vindue. Denne kode kan ikke ændres eller fjernes.


Koden kører helt fint, men uanset placeringen placerer jeg følgende kodekode:


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


Webkameraet initialiserer ikke korrekt og bryder programmet.


mere direkte, jeg får et fejlbehæftet HRESULT på:


CoInitializeEx(NULL, COINIT\_APARTMENTTHREADED)


Mere specifikt på et tidspunkt i min kode jeg kalder CDialog :: doModal (), som så rammer CoInitializeEx (), og dermed gør programmet fejl.


Vil nogen vide, hvad der foregår her?

Bedste reference


CoInitialize vil mislykkes, hvis tråden tidligere blev initialiseret som en anden lejlighed, dvs. hvis der var en tidligere CoInitializeEx (NULL, COINIT\_MULTITHREADED)


Jeg vil gætte at OpenCV kalder CoInitializeEx (NULL, COINIT\_MULTITHREADED), hvilket får dine efterfølgende opkald til CoInitializeEx til at mislykkes. Du kan bekræfte dette ved at kontrollere returneringen af ​​CoInitializeEx - det vil være RPC\_E\_CHANGED\_MODE i dette tilfælde.


Der er ikke nogen retfærdig løsning, det mest enkle bliver at flytte OpenCV-opkaldene til en separat tråd.

Andre referencer 1


Udover hvad Michael sagde også, check for eksterne afhængige DLL'er, hvis en mangler, vil CoInitialize også mislykkes.

Andre referencer 2


Jeg havde et lignende problem. I min MFC-app mislykkedes opkaldet til AfxOleInit med RPC\_E\_CHANGED\_MODE.


Jeg kan ikke ignorere fejlen (jeg har brug for COM inde i appen), og jeg kan ikke flytte OpenCV-opkaldet til en anden tråd (som Michael med rette foreslår).


Jeg fandt tråden 'wxwidgets og opencv 1.1 ole initialiseringsfejl' der løser mit problem: Jeg har ikke brug for videoindgangsstøtten fra OpenCV, og derfor kan jeg fjerne #define HAVE\_VIDEOINPUT 1 som foreslået i http://tech.dir. groups.yahoo.com/group/OpenCV/message/60060[8][9]



  gå til \_highgui.h, kommentar linje 96 ('#define HAVE\_VIDEOINPUT 1')
  og genkompilere



Det virker med OpenCV\_1.1pre1a.