Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1019691
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T11:03:13+00:00 2026-05-16T11:03:13+00:00

I’m currently working on being able to import a DLL written in Fortran into

  • 0

I’m currently working on being able to import a DLL written in Fortran into Visual Basic. I’ve got all the basics down, so now I’m trying to take it a step further. The title basically says it all, but I’ll explain what it is I’m trying to do anyways.

For kicks and giggles, let’s just assume I want to pass an object that has three double values in it, possibly representing a point in space in three dimensions. In my Fortran method, I want to take that object, print out the x value, then change the x value to 7.5. Here’s my Fortran code that does just that.

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

And this code works great!…For structures only. In other words, Let’s assume I have the following structure and class in 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

Creating an instance of StructurePoint yields perfect results: the Fortran method prints out the x value, and then modifies the value of x. Perfect. Now the problem. When I pass an instance of ObjectPoint, the program prints out a value similar to 1.523E-306. Basically, telling me that the location in which it thinks the x value is located is not the x value. So, herein lies my question. Is it even possible to pass an Object to a Fortran DLL and access it correctly, and if so, how would I go about doing so?

The Solution

Modifying the Class declaration is the ONLY thing that has to be done in order to pass this object to 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
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T11:03:14+00:00Added an answer on May 16, 2026 at 11:03 am

    This might be difficult, and I don’t think there’s any benefit, so I advise you not to bother!

    Here goes anyway! I think the VB.Net object will be marshalled as a pointer. There is some support for pointers in Fortran 90. It might work if you add pointer to the Fortran declaration of ThreeDubs.

    function ex1(ThreeDubs) 
       use test 
       type (Point), pointer :: ThreeDubs ! Note additional pointer keyword
       print *, ThreeDubs%x 
       ex1 = 1 
       return 
    end function 
    

    I doubt you would ever be able to call methods in the ThreeDubs object from the Fortran, so I’m not sure of the benefit of passing an object.

    Here are two articles on PInvoke: PInvoke is the .Net name for calling oldschool “unmanaged” DLLs like your Fortran. The articles explain how .Net arguments are “marshalled” (translated) into the Fortran DLL. You have some control over the marshalling using attributes: the articles explain more. They tend to use C and C# for examples 🙁

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I am currently running into a problem where an element is coming back from
this is what i have right now Drawing an RSS feed into the php,
I've got a string that has curly quotes in it. I'd like to replace
I want use html5's new tag to play a wav file (currently only supported
I have a French site that I want to parse, but am running into
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
I have a text area in my form which accepts all possible characters from
i got an object with contents of html markup in it, for example: string

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.