2013-04-08 71 views
2

我還沒有在Stack Overflow上發現任何討論從Fortran調用C#的帖子(我正在使用Visual Studio 2010和Intel Visual Fortran進行安裝)。然而,有一個(非常)有限的帖子[1,2,3]討論了從fortran中調用C/C++。從Fortran中調用C#

在對這些帖子的回覆之一中,有人建議從Fortran調用C++比調用C更復雜,這引發了我對C#可能更棘手的懷疑嗎?缺乏C/C++/C#基礎,我想知道C/C++的程序是否適用於C#?

我在這些帖子中注意到的一個共性是需要名爲ISO_C_BINDING的內在模塊。在閱讀了關於它的更多信息之後,我不清楚ISO_C_BINDING是否允許我將一些值得信息的2D數組傳遞給用C#編寫的程序(編譯爲DLL),調用一些「事件」 (類似於函數?),最後從C#中獲取二維數組信息,然後繼續介紹我在Fortran中的業務。

如果熟悉Fortran和C#,可以請告訴我ISO_C_BINDING是否足以完成任務?我從上面列出的信息中得不到這種意義。如果任何人有一個工作的例子,包括之間C#和Fortran傳遞數組,以及調用C#從Fortran語言功能,我非常高興有機會來看看它在作爲一個模板,我怎麼可能繼續。謝謝,埃裏克

+0

您可能需要使用C膠來包裝你的Fortran代碼。然後你的'C#'代碼將調用* C *代碼,這將調用你的* Fortran * – 2013-04-08 05:27:35

+0

嗨user2256085,我問這個完全相同的問題,像你一樣,無法找到關於它的很多內容。當我找到一些東西,如下面的答案時,它往往似乎是錯誤的方向,那就是Fortran轉向C#而不是Vice-Versa。自你發佈這兩年後,你有沒有發現任何新的東西? – u8it 2015-09-28 14:47:10

+0

P57,我最終得到了一個例子。如果有辦法直接(通過電子郵件)繼續這種對話,那就讓我們這樣做吧,儘管它可能需要我們中的一個人在這裏發佈直接聯繫信息,您可能不想這樣做(我不這樣做)。 – user2256085 2015-09-29 21:31:14

回答

2

Fortran代碼:

function TestPass (floatArray) result (iRes) 
implicit none 
dll_export :: TestPass ! export function name 

integer :: Ires 
real, intent (in out) :: floatArray 

dimension floatArray(5) 

iRes = 0 ! Assign function result 

open (5,FILE='output.txt') 
write (5, 100) floatArray(3) 

floatArray(0) = 0.0 
floatArray(1) = 1.1 
floatArray(2) = 2.2 
floatArray(3) = 3.3 
floatArray(4) = 4.4 

! correct values are written to file here... 
open (5,FILE='output.txt') 
write (5, 100) floatArray(3) 
100 format(5X,'got here',5X,F3.3) 
close (5) 
end function 

C#代碼:

static extern int TestPass (
[MarshalAs(UnmanagedType.LPArray, SizeConst=5, 
ArraySubType=UnmanagedType.R4)] 
float [] yields); 

private void BtnTestClick(object sender, System.EventArgs e) 
{ 
float [] floatArray = new float[5] {9.9F, 9.9F, 9.9F, 9.9F, 9.9F}; 
TestPass(floatArray); 

// floatArray.Length == 0 after the function call 

for (int i = 0; i < floatArray.Length; i++) 
Trace.WriteLine(floatArray[i]); 
} 

也可參考此鏈接:

http://software.intel.com/en-us/articles/calling-fortran-function-or-subroutine-in-dll-from-c-code

您也可以參考一些關於它的理論:

http://www.ibiblio.org/pub/languages/fortran/ch2-4.html

+0

你好自由職業者,天哪,我不得不回頭重讀我原來的文章,因爲你提供的例子讓我以爲我問了我想要的東西。除非我錯過了這個完全可能的顯而易見的東西,否則我正在尋求一個從Fortran中調用C#的例子。也就是說,你(或其他任何人)是否有一些fortran代碼的例子,它使用C#編寫的函數,而不是像上面顯示的那樣使用其他方式? – user2256085 2013-04-09 04:01:39