This article was posted to comp.databases newsgroup:
To make the story short, we have a problem with workstations that have non-microsoft TCP/IP stack (Trumpet Winsock, to be more precise). Btrieve 6.15 requester returns status code 20 if you try to open a file on the netware server that runs Btrieve for Netware.
The through examination revealed that having a microsoft version of WSOCK32.DLL around fixes the problem. Futher investigation reveled that for some reason (like having an ex-microsoft guy on board perhaps?) Pervasive has tied the W32BTICM.DLL to microsoft implementation of WSOCK32.DLL, completely ignoring the Winsock specification that states:
--- cut --------------------------------------------------------
B.7 DLL Ordinal Numbers
The winsock.def file for use by every Windows Socket implementation is as
follows. Ordinal values starting at 1000 are reserved for Windows Sockets
implementors to use for exporting private interfaces to their DLLs. A
Windows Sockets implementation must not use any ordinals 999 and below
except for those APIs listed below. An application which wishes to work
with any windows Sockets DLL must use only those routines listed below;
using a private export makes an application dependent on a particular
Windows Sockets implementation.
---- cut ------------------------------------------------------
beside the question why would Pervasive need to use WSOCK32.DLL for IPX interface at all, they went ahead and built a W32BTICM.DLL that reveals it's ugly guts to DUMPBIN /IMPORTS:
WSOCK32.dll Ordinal 19 Ordinal 1109 Ordinal 23 Ordinal 2 Ordinal 6 Ordinal 21 Ordinal 16 Ordinal 111 Ordinal 115 Ordinal 1111 Ordinal 116 Ordinal 3 Ordinal 4
DUMPBIN /EXPORTS for microsoft's WSOCK32.DLL tells that
1109 ordinal is for GetAddressByNameA 1111 is for EnumProtocolsA
Maybe someone from Pervasive can enlighten us all WHY ON EARTH DID PERVASIVE SCREW THE REQUESTER UP FOR TWO IRRELEVANT FUNCTIONS?
Later on, I found this document from Novell Knowledgebase
BTRIEVE v6.15 does not work with NT Client (Last modified: 04DEC1995)
This document (1007122) is provided subject to the disclaimer at the end of this document. Forward this document to a colleague
Symptom
When attempting to use BTRIEVE for Windows v6.15, either the 16 or 32 bit versions, they fail using the Novell's NetWare Client for Windows NT v3.5. BTRIEVE works with the Microsoft Client, however.
Cause
In their 6.15 version, BTRIEVE makes calls specific to NWLINK, Microsoft's emulation of our IPX/SPX protocol. These calls are not supported by our client and are not standard IPX/SPX calls. BTRIEVE is aware of the problem.
Solution
BTRIEVE must change v6.15 to use standard IPX/SPX calls.
Please select if this document solved your problem.
Document Title: BTRIEVE v6.15 does not work with NT Client Document ID: 1007122 Creation Date: 04DEC95 Modified Date: 04DEC95 Document Revision: 1 Novell Product Class: NetWare OS Novell Product and Version: NetWare Client for Microsoft Windows NT
Copyright © Madis Kaal 2000-