Fortran functions take buffers as char*, and buffer lengths as additional (hidden from Fotran programs, but exposed for C linkage) arguments at the end of the argument list. Depending on the OS and compiler, the arguments may be integers passed by value, as pointers, or some other ways (as structs with extra data).
I've only seen them passed by value with type long, in practice (on ibm/aix, sun/solaris, and gnu/linux compiler/platform combinations)
There is no standard Fortran calling convention. Not only the data types, but their order and size are up to the compiler.
Your Fortran compiler must document the binary interface to be used from C, and your, er, C compiler must support that interface. When I did this in the past, the C compiler required the function to be declared with a special keyword to tell the compiler to use the Fortran convention.
If the Fortran code doesn't change frequently, you might want to have a look at f2c.