サンプルプログラム
    // ngram‚ðì¬‚·‚éAperlƒXƒNƒŠƒvƒg‚ð‚ðŠO•”ŽÀs‚³‚¹‚ÄŒ‹‰Ê(•W€o—Í)‚ðŽæ‚荞‚Þ
    // system()‚¾‚ƃRƒ}ƒ“ƒhƒvƒƒ“ƒvƒg‚ª•\Ž¦‚³‚ê‚邽‚ßCreateProcess()‚ðŽg‚¤
    AnsiString cmd = "perl " + ExtractFilePath(Application->ExeName) + "gen_ngram.pl " + file;

    // –¼‘O‚È‚µƒpƒCƒv‚ðì¬
    SECURITY_ATTRIBUTES sa;
    ZeroMemory(&sa, sizeof(sa));
    sa.lpSecurityDescriptor = NULL;
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;
    HANDLE hRead, hWrite;
    if(! CreatePipe(&hRead, &hWrite, &sa, 0))
    {
        ShowMessage("ƒpƒCƒv‚̍쐬‚ÉŽ¸”s‚µ‚Ü‚µ‚½");
        return KU_RTN_NG;
    }

    //ƒvƒƒZƒXì¬
    PROCESS_INFORMATION pi;
    ZeroMemory(&pi, sizeof(pi));
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    si.wShowWindow = SW_HIDE; // ƒRƒ}ƒ“ƒhƒvƒƒ“ƒvƒg‚ð”ñ•\Ž¦
    si.hStdOutput = hWrite;  // •W€o—Í‚ðã‚̃pƒCƒv‚ɕύX

    if(CreateProcess(NULL, cmd.c_str(), NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &si, &pi))
    {
//        WaitForInputIdle(pi.hProcess, INFINITE);

        // ƒvƒƒZƒX‚ÌŒ‹‰Ê‚ð‘Ò‚Â
        char buf[1024 * 200];
        UINT pos = 0;
        ZeroMemory(&buf, sizeof(buf));

        // INFINITE‚ő҂‚Ɩ߂Á‚Ä‚±‚È‚¢...
        DWORD ret;
        while((ret = WaitForSingleObject(pi.hProcess, 0)) != WAIT_ABANDONED)
        {
            // ƒpƒCƒv‚©‚猋‰Ê‚ð“ǂݏo‚·
            DWORD avail;
            if((PeekNamedPipe(hRead, NULL, 0, NULL, &avail, NULL)) &&
               (avail > 0))
            {
                char tmp[1024 * 16];
                ZeroMemory(&tmp, sizeof(tmp));
                DWORD read;
                if(ReadFile(hRead, tmp, sizeof(tmp) - 1, &read, NULL))
                {
                    memcpy(buf + pos, tmp, read);
                    pos += read;
                }
            }

            if(ret == WAIT_OBJECT_0)
            {
                article->ngram->Add(buf);
                break;
            }
        }
    }

    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    CloseHandle(hRead);
    CloseHandle(hWrite);