"Luke Dunstan" <[EMAIL PROTECTED]> writes: >>> From: "Thomas Heller" <[EMAIL PROTECTED]> >> >> Do you know of any other way except TCP/IP to establish a two-way >> communication between the desktop and the PDA? >> > One way I know is using the CeRapiInvoke() API, which is a kind of remote > procedure call: > > STDAPI_( HRESULT ) CeRapiInvoke( > LPCWSTR pDllPath, > LPCWSTR pFunctionName, > DWORD cbInput, > BYTE * pInput, > DWORD * pcbOutput, > BYTE ** ppOutput, > IRAPIStream ** ppIRAPIStream, > DWORD dwReserved > ); > > You can specify a DLL and function name and the device-side part of RAPI > will load the DLL and call the function, but it must have the following > prototype (see also wincerapi.py): > > typedef HRESULT (STDAPICALLTYPE RAPIEXT)( > DWORD cbInput, > BYTE * pInput, > DWORD * pcbOutput, > BYTE ** ppOutput, > IRAPIStream * pIRAPIStream > ); > > In block mode (ppIRAPIStream == NULL) you can simply pass a block of data in > each direction. The interesting part is that if you pass a pointer then you > will receive a IRAPIStream* that allows the device and PC to communicate in > both directions similar to a socket. > > I have tested this in one direction only using the CeInvoke sample from the > Pocket PC 2003 SDK, and I also tested replacing the desktop-side program > with a Python script. However, so far this API does not seem robust; for > example if the device-side DLL releases the stream then IRAPIStream::Read() > seems to block forever in the desktop program. The CeInvoke sample handles > this by sending a command over the stream to let the desktop know that it > has finished, but to my mind it is a hack because it would be like sending a > disconnect command over a TCP socket and relying on that to shut down the > other end. The function IRAPIStream::SetRapiStat can supposedly set a > timeout for Read() but so far I can't get it to work. There is a two-way > stream sample in an MSDN KB article that I have yet to try. > > For creating development tools there is also the possibility of using the > Platform Manager APIs, which are installed and used by eMbedded Visual C++ > to communicate with the remote debugger, among other things. Platform > Manager supports multiple "transports" including TCP/IP and ActiveSync and > you can even create your own transport. I haven't actually tried using it > yet though :-).
This is useful info, I'm sure I need it when I have time;-) Thanks, Thomas _______________________________________________ PythonCE mailing list PythonCE@python.org http://mail.python.org/mailman/listinfo/pythonce