Subject Re: [firebird-support] Hello folks, desperate for help!
Author Helen Borrie
At 07:37 AM 18/05/2006, you wrote:
>Hello folks, desperate for help

OK, you have multiple problems here, all curable.

>I have built an application on Delphi 7, which uses IB components

This is one of your problems.

>and accesses a Firebird database. I need to install the application
>on any type of windows platforms, including some really old Windows98
>machines (don't ask me why...). On Windows 98, the server gets
>installed alright, however, it doesn't start, it gives me a 'The
>MSVCRT60.DLL file is linked to missing export
>MSVCRT.DL:__lc_collate_cp'. I searched around and I come to no
>solution.

Both the server and the client machine need to have the Microsoft C
(msvcrt.dll) and C++ (msvcrt60.dll) runtimes installed. They are not
installed by default. You should still be able to obtain an
installation pack for Win98 from the Microsoft site; or you could
try the versions that are shipped with Firebird. They are in
Firebird's bin directory.

>The strange thing is that the IBServer gets intalled, and
>runs alright. But, I figured, since that machine would be a
>standalone database I might as well use the embedded version of
>Firebird. Now the strange things start to happen. On a Windows XP,
>all I had to do was to rename the fbembed.dll to gds32.dll and
>everything worked well.
>However, it doesn't work on Windows98.

OK, here's where you have both issues - the need for the Microsoft
runtimes PLUS the problem with using Borland's components.

>Unfortunately, the
>INSTCLIENT.EXE patches only the client fbclient.dll that comes with
>the server version. The embedded server version doesn't seem to get
>patched, unless I did something wrong.

No, that is correct. You can't patch fbembed.dll. But you don't
need to, either. Just don't use it as your client in the IDE. Use
the patched client and the full server for development. Use the
renamed fbembed.dll for deployment.

>Then, I found that
>Delphi uses a file named 'IBIntf.pas' that actually loads the .dll. I
>changed the point where it actually executes the LoadLibrary
>function, forcing it to load the fbclient.dll. Unfortunately, the
>LoadLibrary returns 0, in other words it doesn't return the dll
>handle, and it simply fails to open the
>database file. Well, the strange thing is that it doesn't happen on
>any other Windows platform.

The easier thing to do is to use the renamed fbembed.dll as gds32.dll
but, *especially* to ensure that you place this dll right in the same
directory as the application executable - and don't compile the
Delphi app with the runtime library option!

>Well... my questions are these:
>
>1) How can I get the server started on Windows 98, Does anybody know
>how to bypass those MSVCRT60.DLL file error messages when I try to
>start the server?

Yes. Install the Windoze runtime libraries. It won't work without them.

>2) For Delphi experts: does anybody know why it doesnt load any
>different dll? does it detect at some point dll versions etc?

The "why" is in Borland's IBX components. They are hard-coded to
read the internal version string and use the numbers therein to
decide whether they will let you connect. It's related to licensing,
which of course doesn't apply to Firebird. But, as mentioned
earlier, it's only going to cause problems in the Delphi IDE. And
it's a really bad idea to try to develop with the embedded server,
anyway, even if you use components that do support Firebird by
design. Develop with the full server and the ordinary client, deploy
with embedded.

>3) Is there any patch(i highly doubt it) that would somehow clone the
>fbembed.dll to gds32.dll?

Not needed.

./heLen