MSDOS/DOS OBJ file format compatibility

Chuck Guzis cclist at sydex.com
Thu Jan 1 21:13:37 CST 2009


On 1 Jan 2009 at 20:46, Michael B. Brutman wrote:

> 
> I've been working on my TCP/IP stack for three years now.  It's in 
> Borland Turbo C++ 3.0, which is capable of taking OBJs and making a LIB 
> (library) from them.  This is how I was planning to distribute my code 
> for other people to use.
> 
> A question came up today that I can't readily answer.  If somebody is 
> programming using Microsoft languages, will they be able to link against 
> OBJs or LIBs I provide them?  I have no idea if the OBJ or LIB format is 
> standard and portable across the two vendor toolsets.
> 
> If it is portable then I know I have to watch out for things like 
> parameter ordering.  But how does one express the concept of NEAR and 
> FAR pointers in the different languages?  Is there a guide or a cross 
> reference somewhere?  Maybe something buried in compiler docs somewhere?

Object files are compatible; there may been some naming convention 
issues (recall that MS uses name "mangling" in C++, but I think that 
can be turned off.)  The calling sequence is standard C, with 
arguments being pushed in reverse order and the caller doing the 
cleanup.  Pointer handling between languages can be very different.

Here's the big rub as I see it--you'll have to provide the other 
people with a copy of the Turbo C++ library routines that you use.  
Will there be collisions in names?  Almost certainly if the user 
you're dealing with is writing in MS C.

Each language has its own calling convention (Turbo Pascal, for 
example, pushes arguments on the stack the reverse of Turbo C++ and 
expects the called routine to do stack cleanup on exit).  BASIC 
parameter-passing conventions are very different from, C++, 
particularly in the case of strings.

It can be done, but it's not always easy.

Cheers,
Chuck





More information about the cctech mailing list