我目前正致力於能夠將用Fortran編寫的DLL導入到Visual Basic中。我已經掌握了所有的基礎知識,所以現在我試着更進一步。標題基本上說了這一切,但我會解釋我正在嘗試做什麼。可能將對象作爲參數傳遞給Fortran方法?
對於踢腿和咯咯,讓我們假設我想傳遞一個有三個雙值的對象,可能代表三維空間中的一個點。在我的Fortran方法中,我想獲取該對象,輸出x值,然後將x值更改爲7.5。這是我的Fortran代碼。
module test
type Point
double precision x, y, z
end type Point
end module test
function ex1(ThreeDubs)
use test
type (Point) :: ThreeDubs
print *, ThreeDubs%x
ex1 = 1
return
end function
而這種代碼的偉大工程!...僅供結構。換句話說,假設我有以下結構和類VB
Public Structure StructurePoint
Public x As Double
Public y As Double
Public z As Double
End Structure
Public Class ObjectPoint
Public x As Double
Public y As Double
Public z As Double
End Class
創建StructurePoint的實例得到完美的結果:在Fortran語言方法打印出x的值,然後修改x的值。完善。現在的問題。當我傳遞一個ObjectPoint實例時,程序打印出一個類似於1.523E-306的值。基本上,告訴我它認爲x值所在的位置不是x值。所以,這裏是我的問題。是否有可能將一個對象傳遞給一個Fortran DLL並正確訪問它,如果是這樣,我該如何去做呢?
解決方案
修改類聲明的是,在爲了這個對象傳遞給Fortran語言做的唯一的事情。
<StructLayout(LayoutKind.Sequential)> _
Public Class CustomPoint3d
Public x As Double
Public y As Double
Public z As Double
End Class
<DllImport("passPoint3d.dll")> _
Public Shared Function PrintX(ByVal point As CustomPoint3d) As Boolean
End Function
hmm,使得我的代碼中的Point類型的指針產生完全相同的結果,我將花一點時間看看你放置的這些鏈接。 – AndyPerfect 2010-08-26 19:04:53
確定這裏是另一篇文章的另一個猜測http://msdn.microsoft.com/en-us/library/xedhyxyd(VS.71).aspx在Fortran中保存'pointer',並在VB.Net中添加這行代碼在VB.Net'Public Class ...'定義之前的' _'。你還沒有發佈你的聲明語句:它需要類似'Declare Function ex1 Lib「???。dll」(<[In], Out> ByVal x As ObjectPoint)As Integer'或者是'ex1'返回一個double? –
MarkJ
2010-08-26 21:06:47
這是我的好先生!我將更新我的代碼以反映解決方案最終看起來像傳遞一個對象到Fortran的結果。謝謝一堆。 – AndyPerfect 2010-08-27 16:26:02