Using Microsoft FORTRAN 5.1 with Visual Basic

Last reviewed: February 28, 1997
Article ID: Q121457
5.10 | 3.00 MS-DOS | WINDOWS kbinterop kbfile kbappnote kbprg

The information in this article applies to:

  • Microsoft FORTRAN optimizing compiler for MS-DOS, version 5.1
  • Microsoft Visual Basic for Windows, version 3.0

SUMMARY

This article contains the complete text of Application Note number HF1047. The title of this Application Note is "HF1047: Using FORTRAN 5.1 with Visual Basic."

HF1047 describes how to call FORTRAN routines in a .DLL from a Visual Basic for Windows-based application, and how to create the .DLL file from FORTRAN code.

MORE INFORMATION

To obtain this Application Note, download HF1047.EXE, a self-extracting file, from the Microsoft Software Library (MSL) on the following services:

  • Microsoft Download Service (MSDL)

          Dial (206) 936-6735 to connect to MSDL
          Download HF1047.EXE (size: 32409 bytes) 
    
  • Internet (anonymous FTP)

          ftp ftp.microsoft.com
          Change to the \softlib\mslfiles directory
          Get HF1047.EXE (size: 32409 bytes) 
    

Or you can have this Application Note faxed or mailed to you by calling Microsoft Product Support Services Monday through Friday, 6:00 A.M. to 6:00 P.M. Pacific time. If you are outside the United States, contact the Microsoft subsidiary for your area. To locate your subsidiary, go to the Microsoft Web site http://www.microsoft.com/worldwide/default.htm

THE TEXT OF HF1047

  Microsoft(R) Product Support Services Application Note (Text File)
            HF1047: USING FORTRAN 5.1 WITH VISUAL BASIC(R)
                                                   Revision Date: 9/94
                                                      No Disk Included

| INFORMATION PROVIDED IN THIS DOCUMENT AND ANY SOFTWARE THAT MAY     |
| ACCOMPANY THIS DOCUMENT (collectively referred to as an Application |
| Note) IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER      |
| EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED      |
| WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR       |
| PURPOSE. The user assumes the entire risk as to the accuracy and    |
| the use of this Application Note. This Application Note may be      |
| copied and distributed subject to the following conditions:  1) All |
| text must be copied without modification and all pages must be      |
| included;  2) If software is included, all files on the disk(s)     |
| must be copied without modification (the MS-DOS(R)  utility         |
| diskcopy is appropriate for this purpose);  3) All components of    |
| this Application Note must be distributed together;  and  4) This   |
| Application Note may not be distributed for profit.                 |
|                                                                     |
| Copyright (C) 1994 Microsoft Corporation.  All Rights Reserved.     |
| Visual Basic, Microsoft, and MS-DOS are registered trademarks and   |
| Windows is a trademark of Microsoft Corporation.                    |
|---------------------------------------------------------------------|

FORTRAN AND VISUAL BASIC FOR WINDOWS(TM)

There are several points to consider when using FORTRAN from Visual Basic:

  • Calling FORTRAN routines from Visual Basic for Windows requires that the FORTRAN routines be made into a DLL.
  • When passing data:

        - Both FORTRAN and Visual Basic pass data by reference.
        - Visual Basic strings are different from FORTRAN strings. They
          include a string structure, and require a special declaration
          ("ByVal") to force Visual Basic to pass the string pointer.
        - In Visual Basic, array indices start at 0. In FORTRAN, they
          start at 1.
    
  • There must be a declaration statement in Visual Basic for each FORTRAN routine that will be called.
  • FORTRAN DLLs have two significant problems in file I/O:

        - Unformatted or Binary files can't be accessed with FORTRAN
          commands.
        - ASCII files that are opened in FORTRAN will not be readable
          until you exit from Visual Basic.
    

    The solution to both problems is to use Windows API calls to do file I/O.

    NOTE: For additional information on file I/O, please see the following article in the Microsoft Knowledge Base:

    ARTICLE-ID: Q102698

            TITLE: Performing File I/O from a FORTRAN Dynamic-Link Library
    
    

CREATING A FORTRAN DLL CALLED FROM A VISUAL BASIC PROGRAM

This lab presents the steps required to build a FORTRAN DLL and shows how to create a Visual Basic application that uses this DLL. This lab also shows the syntax required to pass various types of data between FORTRAN and Visual Basic.

Preparation

  1. Install FORTRAN version 5.1 to target 'MS-DOS and Windows' and include the Windows DLL library. When this is completed successfully, the files \FORTRAN\BINB\FL.DEF and \FORTRAN\LIB\LDLLFEW.LIB will be on your computer

    NOTE: If there are problems with any of this, please use the additional information provided in the following article in the Microsoft Knowledge Base:

    ARTICLE-ID: Q112006

            TITLE: FORTRAN 5.1 Setup Procedure for Typical Installations
    
    

  2. Install Visual Basic version 3.0.

  3. Read chapters 1 and 2 of the "Visual Basic Programmers Guide," and do the "Hello World" example.

Procedure

  1. Start Visual Basic, and begin a new project.

  2. Add the following items to the Form by dragging them from the Tool Box to the Form:

        - Four command buttons
        - One text box
    

  3. In the Properties Window, modify the properties of the following items:

       Object               Properties      Setting
       ----------------------------------------------------
       Form                 Caption         VB/Fortran Lab
       Text Box             Text            empty
                            Multi Line      True
                            Scroll Bars     3 Both
       Command Button 1     Caption         Test Array
       Command Button 2     Caption         Test String
       Command Button 3     Caption         Test String Array
       Command Button 4     Caption         Test Square
    
    
       At this point, the Form should look something like this:
    
    
|                          VB/Fortran Lab                         |
|                                                                 |
|                               -------------------------------   |
|  -------------------------    |                           | |   |
|  |      Test Array       |    |                           | |   |
|  -------------------------    |                           | |   |
|  -------------------------    |                           | |   |
|  |      Test String      |    |                           | |   |
|  -------------------------    |                           | |   |
|  -------------------------    |                           | |   |
|  |   Test String Array   |    |                           | |   |
|  -------------------------    |                           | |   |
|  -------------------------    |                           | |   |
|  |      Test Square      |    |                           | |   |
|  -------------------------    |                           | |   |
|                               |                           | |   |
|                               |---------------------------| |   |
|                               -------------------------------   |

  1. From the Project Window, select View Code for the Form.

  2. Add the Visual Basic code as follows:

    Add the following code to the Command1 Click event:

          Sub Command1_Click ()
             Static arr(1 To 3, 1 To 7) As Single
             Call ARRAYTEST(arr(1, 1))
             For i% = 1 To 3
                For j% = 1 To 7
                   ' Enter the following two lines as one, single line of code:
                   text1.Text = Str$(arr(i%, j%)) + Chr$(13) + Chr$(10)
                      + text1.Text
                Next j%
             Next i%
          End Sub
    
       Add the following code to the Command2 Click event:
    
          Sub Command2_Click ()
             Dim temp As String * 40
             Call STRINGER(temp)
             text1.Text = temp + Chr$(13) + Chr$(10) + text1.Text
          End Sub
    
       Add the following code to the Command3 Click event:
    
          Sub Command3_Click ()
             Static testarray(1 To 5) As StringArray
             Call ARRAYSTRING(testarray(1))
             For i% = 1 To 5
                ' Enter the following two lines as one, single line of code:
                text1.Text = testarray(i%).strings + Chr$(13) +
                   Chr$(10) + text1.Text
             Next i%
          End Sub
    
       Add the following code to the Command4 Click event:
    
          Sub Command4_Click ()
             Dim a As Single
             a = 4.2
             Call Square(a)
             text1.Text = Str$(a) + Chr$(13) + Chr$(10) + text1.Text
          End Sub
    
    

  3. Create the files for the form by choosing Save Project As from the file menu. In a directory of your choice, save the form as VB-FORT.FRM, and save the project as VB-FORT.MAK. Create a new module, and save it as GLOBAL.BAS.

  4. From the Project Window, select View Code for GLOBAL.BAS. Add all of the following code to general declarations section in GLOBAL.BAS:

          Type StringArray
    
             strings As String * 24
          End Type
    
          Declare Sub ARRAYTEST Lib "fortvb.dll" (Myarray As Single)
          Declare Sub STRINGER Lib "fortvb.dll" (ByVal mystring As String)
          Declare Sub ARRAYSTRING Lib "fortvb.dll" (Myarray As StringArray)
          Declare Sub Square Lib "fortvb.dll" (a As Single)
    
       NOTE: The DLL name in these declarations could include full path to
       the FORTRAN DLL (For example, "C:\VB\TEXT\FORTVB.DLL"). Then Visual
       Basic won't have to search for it.
    
    

  5. Create the FORTRAN file to be made into a DLL as follows:

    Create a file (FORTVB.FOR) with the following contents, and place it in the same directory where the Form and other Visual Basic files are located:

          C  Code for the FORTRAN DLL 'FORTVB.DLL'
    
                subroutine arraystring(arr)
                character*24 arr(5)
                arr = 'This is a string also'
                end
    
                subroutine arraytest(arr)
                real*4 arr(3,7)
                integer i,j
                do i=1,3
                  do j=1,7
                    arr(i,j) = 11*i+j-1*i
                  end do
                end do
                end
    
                subroutine square(a)
                real*4 a
                a = a*a
                end
    
                subroutine stringer(s)
                character*40 s
                s = 'This is from fortran'
                end
    
    

  6. Create the Definitions file as follows:

    Create the file FORTVB.DEF with the following contents:

          LIBRARY        FORTVB
          EXETYPE        WINDOWS
          PROTMODE
          CODE           PRELOAD MOVEABLE DISCARDABLE
          DATA           PRELOAD MOVEABLE SINGLE
          HEAPSIZE       1024
    
          EXPORTS        WEP
                         ARRAYTEST
                         ARRAYSTRING
                         SQUARE
                         STRINGER
    
    

  7. Build the DLL by typing the following commands at the MS-DOS prompt

        in the directory where the Form and other Visual Basic files
        are located:
    

           FL /c /Gw /Aw /G2 FORTVB.FOR
           LINK FORTVB,FORTVB.DLL,NUL,/NOD LDLLFEW,FORTVB.DEF
    

  8. Copy the DLL to a directory where Visual Basic can find it if the

        declarations did not include the full path to the DLL. This could
        be either the working directory, C:\WINDOWS\SYSTEM, or a directory
        in the path.
    

        NOTE: loading a Visual Basic project does not change the working
        directory. The current project directory is not usually searched
        when loading a DLL.
    

  9. Run the Visual Basic application, and click the command buttons to

        execute the FORTRAN subroutines. The results will appear in the
        text window.
    


Additional reference words: 5.10 HF1047.EXE
KBCategory: kbinterop kbfile kbappnote kbprg
KBSubcategory: APrgOther
Keywords : APrgOther kbappnote kbfile kbinterop kbprg
Version : 5.10 | 3.00
Platform : MS-DOS WINDOWS


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: February 28, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.