Calling CVF-Fortran-dll with ctypes and simple structure

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Apr 8 15:37:19 EDT 2008


En Tue, 08 Apr 2008 06:02:17 -0300, Michael Schäfer <mcat.schaefer at gmx.de>  
escribió:

> Gabriel,
>
> works perfect - even in complex nested structures!
> Thank you very much!
>
>> (If both Fortran and VB say "char*9", why did you choose a pointer  
>> here?)
> I do not know this possibility. Could you please drop me a few lines?

(It's just what I posted and you said it worked)
In C, strings are usually represented as an array of characters  
implicitely ending at the first NULL character. By example: `char foo[20]`  
declares a string variable named foo with enough space for up to 19  
characters (plus the final NULL character).
A very common way of refer to such strings is to pass a pointer to its  
first character: `char *pfoo` declares a variable pfoo which can hold a  
reference to a string variable allocated somewhere (this is the usual way  
to pass a string argument to a function).
In ctypes terminology, the first type is declared as c_char*20, and the  
second one is c_char_p.
In FORTRAN you'd use CHARACTER*20 FOO (or CHARACTER(20)::FOO) to declare a  
string variable with up to 20 characters, right padded with spaces. The  
appropiate way to declare this with ctypes is then to use c_char*20 (and  
probably initialize it with spaces, and trim spaces on the right coming  
 from Fortran). c_char_p declares a pointer, but Fortran filled it as it  
were an array of characters: the first 4 letters of "Sample", when read as  
a little-endian integer, give 0x706D6153, the "invalid pointer" you got.

-- 
Gabriel Genellina




More information about the Python-list mailing list