Version 2 (modified by bennylp, 17 years ago) (diff)


Windows 95/98 Support in PJLIB/PJSIP/PJMEDIA

PJLIB supports both the older Windows 95/98/ME family of Microsoft OSes (win95/win98/winme) and the more advanced Windows NT family of OS'es (WinNT/2000/XP/2003/Vista). However, support for Win95/98 is not turned ON by default so it needs a bit of tweaking in both configuration and project settings.

This short article describes how to enable Win95/98 support in the software. The instructions here have been tested on Windows 98, however it should work on Windows 95 and Windows ME as well.

Thanks Sebastian E. Ovide for reporting and testing this.

Undefine WinNT in config_site.h

The following configuration is needed in your pj/config_site.h file to activate Win95/98 support:

#undef PJ_WIN32_WINNT
#define PJ_WIN32_WINNT  0x0300
#undef _WIN32_WINNT

These would disable the use of NT features in PJLIB's os_core_win32.c file.

Disable Win32 Native File I/O in pjlib

Still in pjlib. Since version 0.5.10, pjlib uses Win32 native CreateFile()/ReadFile()/WriteFile() API for dealing with file I/O, since the ANSI fopen() has a limitation that it can only open a maximum of FOPEN_MAX simultaneous files, and the limit on Windows is about 64 (or maybe less). But unfortunately, it looks like CreateFile() doesn't work as expected on Win98, although it doesn't look like it uses any NT specific features.

So we need to disable Win32 native file I/O and replace it with ANSI stream I/O. To do this:

  1. Open pjlib project
  2. Exclude file_io_win32.c from pjlib build.
  3. Include (do not exclude) file_io_ansi.c in pjlib build.

Disable IoCompletionPort? in pjlib

On Debug build, pjlib Visual Studio project will use socket select() as the back-end implementation for PJLIB's ioqueue, which is fine.

However, on Release build, the Visual Studio workspace will use WinNT IOCompletionPort (IOCP) as the ioqueue backend, and IOCP is not available on Win95/98/ME.

So we need to exclude IOCP from the build, and use select(). To achieve this:

  1. open the pjlib project settings,
  2. exclude ioqueue_winnt.c from the Release build, and
  3. include (do not exclude) ioqueue_select.c in the Release build.

Disable DirectSound? in pjmedia

By default, PJMEDIA uses PortAudio? on Windows with DirectSound? set as the prefered sound backend. This may not work properly on Win95/98, and it may be better to disable DirectSound? support and just use waveIn/waveOut device.

To disable DirectSound? in PortAudio? in PJMEDIA:

  1. Open pjmedia project settings
  2. Add PA_NO_DS macro in the project's Preprocessor settings.


These settings have been tested okay, but should you have any problems specific to Win95/98/ME, please complain Sebastian send email to pjsip mailing list for help.