Return string from Fortran Dll back to C#.

  • Thread starter Thread starter Alex Dong
  • Start date Start date
A

Alex Dong

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
 
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
 
Back
Top