Arbejde med navngivne rør i Windows (C ++/C #)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en C ++-applikation, der skal sende over billeder fra et webcam i realtid til et C # -program på samme pc. C ++ -koden kan ikke kaldes fra C # -koden, så jeg skal implementere kommunikation via navngivne rør for at sende over billederne.


Jeg har aldrig gjort nogen kommunikationsprogrammering før, og jeg spekulerede på, hvordan jeg skulle komme ind på dette problem.


Mine første tanker var at få C ++-applikationen til at oprette den navngivne pipeserver på en separat tråd. Efter oprettelsen vil tråden vente konstant, indtil et billede er tilgængeligt for at sende. På det tidspunkt ville det sende billedet over.


Tilsvarende ville C # -programmet oprette en ny tråd, der fungerer som klienten. Det ville forbinde til serveren og loop kontinuerligt, indtil et billede er tilgængeligt. På det tidspunkt ville det modtage billedet og gemme det i en kø, at hovedtråden kan få adgang.


Giver dette mening? Er dette den bedste tilgang?

Bedste reference


Jeg anden forestillingen om at bruge COM her. Jeg skriver COM-objektet i C #, ærligt, fordi det er nemmere (end C ++). C # har stor COM interoperabilitet. Se http://msdn.microsoft.com/en-us/library/aa645712\%28v=vs.71\%29.aspx. Jeg skrev en arbejdsmæssig MS VSS COM-grænseflade, der kunne kaldes af Python (vores build system), der er forbundet med en C # .NET-grænseflade udsat af en anden leverandør; fordi det var ringe COM, det kunne også kaldes fra JScript, C ++ osv. [1]


Medmindre du går ind i maskinen og/eller har brug for Windows-sikkerhed som en del af dette, undgår jeg navngivne rør, selvom det du rent faktisk bruger til at transportere på tværs af dit objekt, kan være noget, sandsynligvis dikteret af den involverede størrelse/sats.