Andre Poenitz schreef:
On Fri, Sep 11, 2009 at 01:14:39AM +0200, Vincent van Ravesteijn wrote:
You don't need Cygwin to test it.
1. Use "\\.\pipe\lyxpipe" (without quotes) as the LyXserver pipe path
in the preferences.
2. Quit and restart LyX.
3. In a cmd.exe terminal type
echo LYXCMD:test:file-open> \\.\pipe\lyxpipe.in
type \\.\pipe\lyxpipe.out
If the file dialog opens, it works.
This doesn't work. I get an error message: "LyXComm: The parameter is
invalid", or ERROR_INVALID_PARAMETER in server....@294.
If I do the following it works (but it'll not be the correct fix, but
you know at least that it works in this case):
server....@280--282:
success = ReadFile(pipe_[i].handle,
pipe_[i].readbuf, PIPE_BUFSIZE - 1,
+ &pipe_[i].nbytes, &pipe_[i].overlap);
- &pipe_[i].nbytes, NULL);
The following fixes it for me:
bool LyXComm::startPipe(DWORD index)
{
pipe_[index].pending_io = false;
+ pipe_[index].overlap.Offset = 0;
+ pipe_[index].overlap.OffsetHigh = 0;
see http://msdn.microsoft.com/en-us/library/aa365603(VS.85).aspx and
scroll down to the third comment:
CORRECTION
Please Wait Please Wait
To make this code work you'll need to clear the OVERLAPPED struct before
it's used by ReadFile/WriteFile. For that correct the
ConnectToNewClient() method like this:
|BOOL ConnectToNewClient(HANDLE hPipe, LPOVERLAPPED lpo) { BOOL
fConnected, fPendingIO = FALSE;
|
|*lpo->*|*Offset*| = 0; //MISSING!
|
|*lpo->*|*OffsetHigh*| = 0; //MISSING!|
|// Start an overlapped connection for this pipe instance. fConnected =
ConnectNamedPipe(hPipe, lpo); ...
}
We are still in the thread that contained at some point of time
> [...]
5. It works.
right?
Andre'
I can confirm it works.
Vincent