Dear all:
My C# program need a string returned from a Fortran Dll.
The Fortran Dll is like this:

SUBROUTINE REDO(s)
!DEC$ ATTRIBUTES DLLEXPORT::REDO, C
CHARACTER*(*) s
!DEC$ ATTRIBUTES REFERENCE :: s
s = 'Let them talk, now!'C
END

And I use C# PInvoke to call it, the client code like this:

public class BackString
{
[DllImport(@"BackString.dll",
EntryPoint="REDO")]
public static extern void REDO(string output);
}

string output = "";
BackString.REDO(output);

When I call this, I got an NullReferenceException, can anybody here explain
why? and how could I return the string?

I also tried to return the value as "Return" but have the same problem. The
.NET Framework's PInvoke example to use C's return string works fine, but I
just can't make the Fortran work.

Thank everybody and hope I could get some reply.

Regards
Alex

Re: Return string from Fortran Dll back to C#. by Vadim

Vadim
Fri Jul 04 06:02:30 CDT 2003

Hi,

> And I use C# PInvoke to call it, the client code like this:
>
> public class BackString
> {
> [DllImport(@"BackString.dll",
> EntryPoint="REDO")]
> public static extern void REDO(string output);
> }
>
> string output = "";
> BackString.REDO(output);
>
> When I call this, I got an NullReferenceException, can anybody here
explain
> why? and how could I return the string?
>

StringBuilder should be used for string out arguments. How about the
following in C# ?

public static extern void REDO(StringBuilder output);

....

StringBuilder sb = new StringBuilder(1024);
REDO(sb);
Console.WriteLine(sb);


..
Regards,
Vadim