c ++ - Udfør ekstern funktion, der tilhører anden proces

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ville have brug for hjælp med et problem. Jeg har 2 processer i gang, en vagthund og den anden en simpel testproces. Jeg har brug for proces 2 til at kalde kode fra Vagthunden, hvorfor jeg gør dette er at reducere størrelsen af ​​proces 2. For eksempel skal proces 2 kalde en funktion kaldet 'IsSafe' fra vagthunden. IsSafe-funktionen er afhængig af anden kode, der tilhører Watchdog-processen, og det vil ikke være levedygtigt at omskrive denne kode til proces 2. Jeg har tænkt på ideer, kan du venligst rådgive om, hvilken er den bedste løsning og eller rådgive.


Idé 1


Brug navngivne rør til at kommunikere mellem processer og pass parametre og returnere værdier rundt.


Idé to


Brug Delhukommelse til at dele parametre og returnere værdier


Ide tre


Brug Windows-meddelelser, jeg tror ærligt, at dette ikke virker


Ide fire


På en eller anden måde opretter du en eksekverbar del af delt hukommelse og udfører denne kode med en langt jmp.


Kan du venligst rådgive.

Bedste reference


Selv om koden i den proces, der skal kalde den, er gode råd generelt, er det korrekt i et tilfælde af en vagthund (også debugger og enhver anden form for fejlhåndterer) ved hjælp af separate processer. Du vil ikke have vagthunden at mislykkes på grund af en fejl i hovedkoden, så det skal være en separat proces.


Et navngivet rør ville være ideelt i dette scenario, funktionen TransactNamedPipe er kun designet til dette. [2]

Andre referencer 1


RPC blev opfundet for længe siden. Så KOM på toppen af ​​det. Efter min mening glemmer du bedst din ide, men hvis du skal bruge COM.


Forresten, at kommunikere mellem processer på samme Windows-maskine uden COM, brug mailslots.


Synes du har glemt dem i din liste.


Skål & HTH.,

Andre referencer 2


En DLL er standardimplementeringen af ​​idé 4. Den er indlæst i begge adresserum, men deles i fysisk RAM. Du behøver ikke specielle tricks; Det virker overalt, og Windows vil håndtere eventuelle sikkerhedsproblemer for dig.


Det er også bærbart til de fleste andre operativsystemer, selvom de generelt kaldes noget andet, f.eks. .so på linux.

Andre referencer 3


Alt du behøver virkelig er noget IPC. For en let og nem løsning skal du blot definere en applikationsspecifik besked med WM\_APP og have en kortlægning fra wParam/lParam for parametre. Hvis du finder ud af mere end 8 byte, kan du bruge WM\_COPYDATA i stedet.