В настоящее время я работаю над тем, чтобы импортировать DLL, написанную на Фортране, в Visual Basic.У меня есть все основы, так что теперь я пытаюсь сделать еще один шаг вперед.Заголовок в основном говорит сам за себя, но я все равно объясню, что именно я пытаюсь сделать., возможно, представляет точку в пространстве в трех измерениях.В моем методе Fortran я хочу взять этот объект, распечатать значение x, а затем изменить значение x на 7.5.Вот мой код на Фортране, который делает именно это.
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.Итак, в этом и заключается мой вопрос.Можно ли даже передать Объект в DLL-библиотеку Фортрана и получить к нему правильный доступ, и если да, то как мне поступить?
Решение
ИзменениеОбъявление класса - ЕДИНСТВЕННАЯ вещь, которую нужно сделать, чтобы передать этот объект в Фортран.
<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