2010-01-07 4 views
2

나는 다음 FORTRAN 한 : 나는 CHARACTER * 50 유형의 매개 변수를 사용하여 C#에서 FORTRAN으로 매개 변수를 전달하는 방법?

class Program 
{ 
    static void Main(string[] args) 
    { 
     StringBuilder sb = new StringBuilder(50); 
     sb.Append(@"something"); 
     MYSUB(sb); 

     Console.ReadLine(); 
    } 

    [DllImport(@"myCode.dll", EntryPoint = "MYSUB")] 
    public static extern void MYSUB(StringBuilder input); 

} 

는하지만, 내 FORTRAN에서 WRITE 후 쓰레기의 무리이다 C#

다음

SUBROUTINE MYSUB(MYPARAM) 
    !DEC$ ATTRIBUTES DLLEXPORT::SetPaths 

    CHARACTER*50 MYPARAM 

    WRITE(6, *) MYPARAM 

    END SUBROUTINE 

을에서 다음했다 "무언가를." 문자열 터미네이터가 존중받지 못하는 것 같습니다. 도움!

답변

2

문자열은 서로 다른 언어 간 교묘 한 데이터 형식입니다.

기본 포트란 문자열은 고정 길이이며 끝에 공백이 있습니다. (Fortran에는 이제 가변 길이 문자열이 있지만 상호 교환하기가 더 어려울 것입니다.) 내재 된 "trim"은 후행 공백을 억제하기 위해 제공됩니다. "len_trim"은 뒤 공백이 적은 길이를 제공합니다.

C는 널 문자로 문자열 끝에 플래그를 설정합니다.

C#이 문자열을 처리하는 방법을 알지 못합니다 - 길이에 대한 내부 변수는 무엇입니까 ?? 종결 자 ??

그러나 Fortran은 C#의 표현을 이해하지 못할 것이고, 선언 된대로 문자열의 전체 길이를 볼 수 있습니다 (이 경우에는 초기화되지 않은 메모리 포함). 가장 좋은 해결책은 C#에서 공백으로 문자열의 나머지 부분을 초기화하는 것입니다.