Back to home page

DOS ain't dead

Forum index page

Log in | Register

Back to the board
Thread view  Mix view  Order
post-factum(R)

Homepage

/ukraine/kyiv,
02.01.2010, 13:29
(edited by post-factum, 02.01.2010, 14:44)
 

hx+win32+fpc 2.4.0 vs loadlibrary+dll (DOSX)

WIN32-programs, compiled with FPC 2.4.0 and loaded with HX are not able to handle dynamic libraries (dll) anymore. I tried HXRT217 and 216 with the same result.

I tried to do this under FreeDOS in qemu, bochs and dosemu and got no positive result.

Using FPC 2.2.4 everything works, but I'm not sure that this is FPC trouble, because Linux target does things well even compiled by FPC 2.4.0.

Sources and binaries are available via this link:

http://postfactum.pl.ua/nebula3/download.php?q=da17c1e60708fabbd4984a7b00cd0178

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

marcov(R)

02.01.2010, 21:21
(edited by marcov, 03.01.2010, 13:17)

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> WIN32-programs, compiled with FPC 2.4.0 and loaded with HX are not able to
> handle dynamic libraries (dll) anymore. I tried HXRT217 and 216 with the
> same result.

I'm not entirely sure, but it might be that FPC 2.4.0 uses some -W bits here and there, and afaik now requires MSLU (on w9x. I don't know if HX emulates the -W stuff/MSLU)

> Sources and binaries are available via this link:
>
> http://postfactum.pl.ua/nebula3/download.php?q=da17c1e60708fabbd4984a7b00cd0178

Binary works fine under XP.


* added later: the stuff between parentheses.

post-factum(R)

Homepage

/ukraine/kyiv,
02.01.2010, 22:11

@ marcov

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> I'm not entirely sure, but it might be that FPC 2.4.0 uses some -W bits
> here and there, and afaik now requires MSLU.

First of all, I tried to play with fpc -W switches, but got no result.

Putting MSLU files (unicows.dll and unicows.pdb) into testing folder didn't help as well.

What should I do?

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Rugxulo(R)

Homepage

Usono,
02.01.2010, 23:23

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> > I'm not entirely sure, but it might be that FPC 2.4.0 uses some -W bits
> > here and there, and afaik now requires MSLU.
>
> First of all, I tried to play with fpc -W switches, but got no result.
>
> Putting MSLU files (unicows.dll and unicows.pdb) into testing folder
> didn't help as well.
>
> What should I do?

Dunno, but here's a informative link (esp. about the partial Mozilla reimplementation):

http://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode

post-factum(R)

Homepage

/ukraine/kyiv,
03.01.2010, 11:33

@ Rugxulo

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> Dunno, but here's a informative link (esp. about the partial Mozilla
> reimplementation):
>
> http://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode

I have no idea how to apply this to fixing the issue :(.

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Rugxulo(R)

Homepage

Usono,
03.01.2010, 15:12

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> > Dunno, but here's a informative link (esp. about the partial Mozilla
> > reimplementation):
> >
> > http://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode
>
> I have no idea how to apply this to fixing the issue :(.

Sorry, not sure it will. But can you at least try OpenCow? Or try WDOSX, there is some minimal support for that in FPC too (or at least used to be).

post-factum(R)

Homepage

/ukraine/kyiv,
03.01.2010, 22:46

@ Rugxulo

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> Sorry, not sure it will. But can you at least try OpenCow?

How? And why should it help?

> Or try WDOSX,
> there is some minimal support for that in FPC too (or at least used to
> be).

I tried WDOSX, it has no threads support.

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Japheth(R)

Homepage

Germany (South),
04.01.2010, 10:02

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> WIN32-programs, compiled with FPC 2.4.0 and loaded with HX are not able to
> handle dynamic libraries (dll) anymore. I tried HXRT217 and 216 with the
> same result.
>
> I tried to do this under FreeDOS in qemu, bochs and dosemu and got no
> positive result.
>
> Using FPC 2.2.4 everything works, but I'm not sure that this is FPC
> trouble, because Linux target does things well even compiled by FPC
> 2.4.0.

I ran your test app under a debugger. AFAICS the problem is that your dll's DllMain function ( sometimes also called LibMain ) returns -1. HX's DPMILD32 expects this function to return 1 on success.

This is what MSDN says about DllMain's return value:

-------------------------------------------------------------
When the system calls the DllMain function with the DLL_PROCESS_ATTACH value, the function returns TRUE if it succeeds or FALSE if initialization fails. If the return value is FALSE when DllMain is called because the process uses the LoadLibrary function, LoadLibrary returns NULL. (The system immediately calls your entry-point function with DLL_PROCESS_DETACH and unloads the DLL.) If the return value is FALSE when DllMain is called during process initialization, the process terminates with
-------------------------------------------------------------


It seems that DPMILD32 is slightly more picky than Windows.

Btw., the DllMain function inside lib.dll calls LoadLibrary() on its own, which - according to MSDN - is an error:

-------------------------------------------------------------
Warning  On attach, the body of your DLL entry-point function should perform only simple initialization tasks, such as setting up thread local storage (TLS), creating objects, and opening files. You must not call LoadLibrary in the entry-point function, because you may create dependency loops in the DLL load order. This can result in a DLL being used before the system
-------------------------------------------------------------

---
MS-DOS forever!

post-factum(R)

Homepage

/ukraine/kyiv,
04.01.2010, 12:01

@ Japheth

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> I ran your test app under a debugger. AFAICS the problem is that your
> dll's DllMain function ( sometimes also called LibMain ) returns -1. HX's
> DPMILD32 expects this function to return 1 on success.

As I understand from Google, there's no way to set up returning 1 from DllMain in FPC :(.

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Khusraw(R)

E-mail

Bucharest, Romania,
04.01.2010, 13:51

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> > I ran your test app under a debugger. AFAICS the problem is that your
> > dll's DllMain function ( sometimes also called LibMain ) returns -1.
> HX's
> > DPMILD32 expects this function to return 1 on success.
>
> As I understand from Google, there's no way to set up returning 1 from
> DllMain in FPC :(.

Doesn't it have to do with the new implementation of TRUE in FPC?

post-factum(R)

Homepage

/ukraine/kyiv,
04.01.2010, 13:55

@ Khusraw

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> Doesn't it have to do with the new implementation of TRUE and FALSE in
> FPC?

http://wiki.freepascal.org/User_Changes_2.4.0#Byte.2FWord.2FLong.2FQwordbool_types

This one? But, in such case, who is right ? HX, WinAPI or FPC?

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Khusraw(R)

E-mail

Bucharest, Romania,
04.01.2010, 14:25

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> http://wiki.freepascal.org/User_Changes_2.4.0#Byte.2FWord.2FLong.2FQwordbool_types
>
> This one? But, in such case, who is right — HX, WinAPI or FPC?

Be aware that various compilers for different programming languages have different definitions for TRUE (AFAIK FALSE is always 0). So it is better to check for 1 or -1 when it is the case, instead of TRUE. Certainly not your fault, but they missed it.

post-factum(R)

Homepage

/ukraine/kyiv,
04.01.2010, 14:31

@ Khusraw

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> Be aware that various compilers for different programming languages have
> different definitions for TRUE (AFAIK FALSE is always 0). So it is better
> to check for 1 or -1 when it is the case, instead of TRUE. Certainly not
> your fault, but they missed it.

So to fix this, I have to recompile FPC?

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Japheth(R)

Homepage

Germany (South),
04.01.2010, 14:42

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> So to fix this, I have to recompile FPC?

It's rather trivial to fix in DPMILD32. So I did a small update to HXRT217.ZIP, which then hopefully works with fpc 2.4.

---
MS-DOS forever!

post-factum(R)

Homepage

/ukraine/kyiv,
04.01.2010, 15:52

@ Japheth

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> It's rather trivial to fix in DPMILD32. So I did a small update to
> HXRT217.ZIP, which then hopefully works with fpc 2.4.

Yes, it works. Thanks a lot.

---
% uname -a
Linux eternity 3.0.1-pf #1 SMP PREEMPT Fri Aug 5 21:45:05 EEST 2011 i686 Intel(R) Pentium(R) Dual CPU T2330 @ 1.60GHz GenuineIntel GNU/Linux

Rugxulo(R)

Homepage

Usono,
06.01.2010, 18:42

@ post-factum

hx+win32+fpc 2.4.0 vs loadlibrary+dll

> > It's rather trivial to fix in DPMILD32. So I did a small update to
> > HXRT217.ZIP, which then hopefully works with fpc 2.4.
>
> Yes, it works. Thanks a lot.

Yes, big thanks!

Back to the board
Thread view  Mix view  Order
15108 Postings in 1358 Threads, 245 registered users, 14 users online (0 registered, 14 guests)
DOS ain't dead | Admin contact
RSS Feed
powered by my little forum