Winapiでプロセス間のリアルタイム映像転送
どうも、チョコです。久しぶりの進捗がありました。
今回は、OpenGLの2つのアプリ間で通信をしないといけないことになりました。ただし、リアルタイムの生画像転送なので、100mbpsくらいの速度が最低ないと困る。
ポートとかパイプあけて通信すればよいではという考えもあったが、アプリAがアプリBの好きなデータを取れるようにしたい(そういうプロジェクトだから)。なので、いちいちデータの名前送ってデータをもらうとすごく面倒だし、なにより遅い。
そこで、WinAPIのReadProcessMemoryです。要は、アプリAがアプリBに親権限を持っていれば、なんでもしていいよとのこと。よさ。
WriteProcessMemory(HANDLE processHandle, void* source, void* destination, ulong numbytes, ulong* numbytesread)
*sourceはアプリBでのポインタ値で、destinationはそのポインタの指しているデータをアプリAにコピーする場所。destinationを先に初期化しないといけない(それはそう/1時間消耗した。)。
ん、読みたいところのポインタがないとできないね(それはそう)。ので、まずはポインタ集というStructを作ります。
struct PointerList {
uint hasDataLoc, pixelsLoc, pixelCountLoc, displayWLoc, displayHLoc, okLoc;
} pointers;
*win32なので、ポインタは32ビットunsigned intに変換できます。
なので、最初にこのStructを読み取れば、すべてのポインタがわかるね。わーい。
実際にやったものを見せよう。
わーい。(ただこれを見せたかった)
では。
Posted on: 2017年10月23日, by : chokopan