[Rd] dyn.load
Tom McCallum
tom.mccallum at levelelimited.com
Tue Nov 21 18:30:56 CET 2006
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}}
More information about the R-devel
mailing list