Calling Fortran from Python
mangabasi at gmail.com
Thu Apr 5 16:33:12 CEST 2007
On Apr 4, 10:10 pm, Lenard Lindstrom <l... at telus.net> wrote:
> Mangabasi wrote:
> > On Apr 4, 5:48 pm, Robert Kern <robert.k... at gmail.com> wrote:
> >> Mangabasi wrote:
> >>> Would Python 2.5 work with Visual Studio 6.6?
> >> No.
> >> --
> >> Robert Kern
> >> "I have come to believe that the whole world is an enigma, a harmless enigma
> >> that is made terrible by our own mad attempt to interpret it as though it had
> >> an underlying truth."
> >> -- Umberto Eco
> > I will try the GCC then. It is a shame that I could not get calldll
> > to work. It was very simple to use. I think I am making a mistake
> > with the argument types but not sure.
> > Thanks for your help, it is greatly appreciated.
> Did you try ctypes?
> >>> from ctypes import *
> >>> sample=cdll.sample.sample_
> >>> sample.restype=None
> >>> sample.argtypes=[POINTER(c_int), POINTER(c_int), POINTER(c_double),
> >>> e1 = c_int(0)
> >>> e2 = c_int(0)
> >>> ain = (c_double*3)(2.0, 3.0, 4.0)
> >>> aout = (c_double*4)()
> >>> sample(e1, e2, ain, aout)
> >>> aout[:]
> [6.0, 9.0, 8.0, 12.0]
> >>> e1.value
> >>> e2.value
> I compile the SAMPLE example with mingw g77 3.4.5:
> g77 -shared -o sample.dll sample.for
> I had to take out the "INTENT(OUT)"s because g77 didn't like them. And
> "SAMPLE" became "sample_" in the dll. Also note that argument passing to
> Fortran subroutines is strictly pass-by-reference. Thus the ain pointer.
> Lenard Lindstrom- Hide quoted text -
> - Show quoted text -
A little bit of googling solved the problem. instead of
>>> sample = cdll.sample_dll.SAMPLE
>>> sample = windll.sample_dll.SAMPLE
and now it seems to be working without error messages.
Thanks a lot.
More information about the Python-list