I thought we went over this before. QuickBasic 4.5, PDS 7.1, and VBDOS produce 16 bit binaries, whether they are .lib files or .exe files. So what you are asking is how to link 32 bit binaries with 16 bit binaries written in a different language to boot. Actually, I wondered about that myself at one time, and even looked into it. Let me tell you, it gets real hairy real quick.
The fact of the matter is that even 32 bit compilers of the same exact language but of different manufacturers are not binary compatible. If you create an obj/lib file with the GNU C++ 32 bit compiler I do not believe you will be able to use it with for example, Visual C++ from Microsoft.
This is not the case with exported functions from Dll, but to the best of my knowledge is the case with obj code. Microsoft's Component Object Model ( COM ) went a long way to solving this binary compatibility problem by creating a standard as to what a binary image/interface should look like.
The term used for attempting to connect 32 bit code with 16 bit code is 'thunking'. Here is a Wikipedia link...
http://en.wikipedia.org/wiki/Thunk
Look down towards the bottom of that page for this topic...
Thunk as compatibility mapping
But in terms of your continued attempts to use this old basic code, I do not believe you will succeed by trying to connect somehow to 16 bit lib binaries, nor to 16 bit dlls. Your best bet (and what I thought you were doing with Free Basic) is to compile the old basic code into a 32 bit Dll using a modern 32 bit basic compiler. Why is that not working? You had figured out how to produce one with Free Basic.