Hello all,
Well, for the sake of the record and perhaps help someone else who has stumbled on this problem, I have finally got code that does what I want. Here it is:
Code:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int _tmain (int argc, LPTSTR argv [])
{
DWORD i;
HANDLE hReadPipe, hWritePipe;
SECURITY_ATTRIBUTES PipeSA = {sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
/* Init for inheritable handles. */
TCHAR outBuf[ ] = TEXT("a=2; plot sin(a*x)/x; pause mouse; plot exp(-a*x); pause mouse") ;
TCHAR inBuf[80];
DWORD dwWritten, dwRead ;
BOOL bSuccess = FALSE;
PROCESS_INFORMATION ProcInfo2;
STARTUPINFO StartInfoCh2;
/* Startup info for the Gnuplot process. */
GetStartupInfo (&StartInfoCh2);
/* Create an anonymous pipe with default size.
The handles are inheritable. */
bSuccess = CreatePipe (&hReadPipe, &hWritePipe, &PipeSA, 0);
if (bSuccess == TRUE) printf("pipe created\n");
WriteFile(hWritePipe, outBuf, sizeof(outBuf), &dwWritten, NULL) ;
printf("Wrote %d bytes to Gnuplot\n", dwWritten) ;
CloseHandle (hWritePipe);
/* Repeat (symmetrically) for the child process. */
StartInfoCh2.hStdInput = hReadPipe;
StartInfoCh2.hStdError = GetStdHandle (STD_ERROR_HANDLE);
StartInfoCh2.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
StartInfoCh2.dwFlags = STARTF_USESTDHANDLES;
bSuccess = FALSE ;
bSuccess = CreateProcess ("c:\\gnuplot\\bin\\pgnuplot.exe", NULL, NULL, NULL,
TRUE,0, NULL, NULL, &StartInfoCh2, &ProcInfo2);
if (bSuccess == TRUE)
printf("Created Gnuplot Process\n" ) ;
WaitForSingleObject (ProcInfo2.hProcess, INFINITE);
CloseHandle (ProcInfo2.hThread);
CloseHandle (hReadPipe);
/* Wait for Gnuplot process to complete.*/
CloseHandle (ProcInfo2.hProcess);
return 0;
}
AdeyBlue's overall notion is reflected in the above use of anonymous pipe. This is rather an ugly solution in that the TEXT message to plot something isn't easily constructed from the GUI itself; someone might have a prettier solution and I'd be interested to see it.
Regards,
Mark Allyn