2010-01-07 84 views
2

我有以下FORTRAN:如何使用CHARACTER * 50類型的參數將參數從C#傳遞給FORTRAN?

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

    CHARACTER*50 MYPARAM 

    WRITE(6, *) MYPARAM 

    END SUBROUTINE 

然後,我有以下的C#

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顯示了在一堆垃圾的 「東西」。看起來像字符串終結者沒有被尊重。幫幫我!

回答

2

字符串是在不同語言之間交換的最棘手的數據類型。

基本的Fortran字符串是固定長度,用空格填充結尾。 (Fortran現在具有可變長度的字符串,但這些字符串很難交換。)內在的「trim」用於抑制尾隨空白; 「len_trim」提供較少的尾隨空白。

C用空字符標記字符串的末尾。

我不知道C#如何處理字符串 - 一個內部變量的長度?一個終結者?

但是Fortran不會理解C#的表示,它只會看到聲明的全部字符串,包括在這種情況下的未初始化內存。最好的解決方案可能是在C#中將字符串的其餘部分初始化爲空白。

相關問題