C#에서 fortran 서브 루틴을 호출합니다. 나는에 전달할 수있는 매개 변수 중 하나는 매개 변수가마샬링해야 할 것은 무엇입니까?
지금character, intent(in) :: bmat*1
문제이며, C# 코드에서, 내가 무엇으로 마샬링해야 선언되는 포트란에서, 문자 .i.e입니까? integer
에 대해서는 [MarshalAs(UnmanagedType.I4)]
으로 마샬링해야하지만, character
은 어떨까요?
편집 :이 내 포트란 코드 :
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
그리고 이것은 내 상호 운용성 코드 :이 내가 루틴을 호출하는 방법입니다
[DllImport(@"eigensolver_win32.dll")]
public static extern void chartest([MarshalAs(UnmanagedType.U1)] char bmat);
:
char bmat = 'G';
EigenSolver32.chartest(bmat);
내가 얻은 결과는 "결과가 없음"이며, 이는 if
i 성취되지 않았습니다.
그래서 무엇이 당신을 위해 일하게 되었습니까? –
@ 존, 대답은 작동합니다 – Graviton
'ref 바이트 '를 사용해야합니까? –