I am calling a fortran subroutine from C#. One of the parameter I have to pass in is character .i.e, in fortran that parameter is declared as
character, intent(in) :: bmat*1
The issue now is, in C# code, what should I marshaled it as? I know that for integer
, I should marshal it as [MarshalAs(UnmanagedType.I4)]
, but what about character
?
Edit: This is my fortran code:
subroutine chartest(bmat)
!DEC$ ATTRIBUTES DLLEXPORT::chartest
!DEC$ ATTRIBUTES ALIAS:'chartest'::chartest
!DEC$ ATTRIBUTES VALUE ::bmat
character, intent(in) :: bmat*1
if(bmat .eq. 'G')then
print *, bmat
else
print *, ' no result '
endif
end
And this is my interop code:
[DllImport(@"eigensolver_win32.dll")]
public static extern void chartest( [MarshalAs(UnmanagedType.U1)] char bmat);
This is how I call the routine:
char bmat = 'G';
EigenSolver32.chartest(bmat);
The result I got was "no result", indicating that the if
is not fulfilled.