[Rd] dyn.load
Tom McCallum
tom.mccallum at levelelimited.com
Wed Nov 22 16:48:24 CET 2006
To answer my own question - you can use DllMain with Rwin_fpset() to get
around this error message.
Am still struggling though as it crashes when it tries to call a function
in the wrapped DLL - any ideas on how to debug this?
Hope this is of help to some one
Tom
On Tue, 21 Nov 2006 17:30:56 -0000, Tom McCallum
<tom.mccallum at levelelimited.com> wrote:
> Hi everyone,
>
> Now I know there is information on this in the help files - which I have
> read. I am very close to implementing this but can't quite get how to
> remove this final hurdle.
>
> I have a DLL called "X.DLL" which I have no original code for, just the
> DLL.
> I have created a wrapper C file for the calls in X.DLL, and have
> successfully (I think) created a wrapper DLL for X called, lets say,
> WRAPX.DLL.
>
> On performing:
>
>> dyn.load("WRAPX.dll")
>
> in the Rgui terminal, I then received this warning:
>
> Warning message:
> DLL attempted to change FPU control word from 8001f to 9001f
>
> Getting rid of this error was part of the reason for writing WRAPX.DLL,
> as
> X.DLL seems to play about with this register.
>
> So having another look at the manual entry, I then used the function
> Rwin_fpset() (in gnuwin32/extra.c) to reset the FPU control register when
> I leave all the functions in WRAPX.DLL. But the problem persists. In
> the
> Delphi example in the manual, which I have put at the end of this
> message,
> ( and I have never programmed in Delphi before so I am guessing ) there
> is
> the opportunity on loading the dynamic library to set this register, but
> I
> am wondering where in the C file I can put this command so that when
> dyn.load is called it is not upset by X.DLL changing this register. I
> think I need the following passage of play to occur:
>
> USER : > dyn.load("WRAPX.DLL");
> R : Calls WRAPX.DLL
> WRAPX.DLL : WRAPX.DLL initialises X.DLL which interferes with FPU
> register
> WRAPX.DLL : Calls Rwin_fpset() to reset FPU register
> R : R tests FPU register and is happy
> USER : Sees "Success library is loaded!" or something to that effect :)
>
> Any ideas on how to achieve this?
>
> Many thanks
>
> Tom
>
> ====DELPHI CODE=====
>
> procedure Rwin_fpset; cdecl; external 'R.dll';
>
> function Get8087CW:word;
> begin
> asm
> fstcw result
> end;
> end;
>
> begin
> Rwin_fpset(); <============== these lines I think is called on
> loading
> of the DLL to reset the register
> Set8087CW(Get8087CW); <========
> end.
>
> ===END DELPHI CODE=====
>
>
>
> --
> Dr. Thomas McCallum
> Systems Architect,
> Level E Limited
> ETTC, The King's Buildings
> Mayfield Road,
> Edinburgh EH9 3JL, UK
> Work +44 (0) 131 472 4813
> Fax: +44 (0) 131 472 4719
> http://www.levelelimited.com
> Email: tom at levelelimited.com
>
> Level E is a limited company incorporated in Scotland. The
> c...{{dropped}}
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
--
Dr. Thomas McCallum
Systems Architect,
Level E Limited
ETTC, The King's Buildings
Mayfield Road,
Edinburgh EH9 3JL, UK
Work +44 (0) 131 472 4813
Fax: +44 (0) 131 472 4719
http://www.levelelimited.com
Email: tom at levelelimited.com
Level E is a limited company incorporated in Scotland. The c...{{dropped}}
More information about the R-devel
mailing list