- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am working on a program inversion 2108 of parallel fortran. The program has a main executable communicating with a dll. I used the information in the article "coding requirements for sharing data in DLL's".
I have a common named Reserves, and a subroutine call GetReserveFund. The following statement was added to the main program:
!Dec$ATTRIBUTE DLLEXPORT :: GETRESERVEFUND, /Reserves/
I then added this code the main program:
!Dec$ATTRIBUTE DLLIMPORT :: GETRESERVEFUND, /Reserves/
When I run the program I get the following run time error:
FortranTest.Exe - Entry Point Not Found.
The procedure entry point Reserves could not be located in the dynamic link library cfx_fortran_dll.dll.
I am trying to pass a common block, why does it think it is a procedure. I followed the documentation and I am not sure why it is not working.
Thanks.
Michael
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You have misspelled the directive. It starts:
!DEC$ ATTRIBUTES
not:
!Dec$ATTRIBUTE
The lowercase is fine, but the keyword is incorrect and there must be a space after the $. Or maybe you're just typing this from memory and your actual program has something different - that makes it quite difficult to help you.
If you still need help, please post a minimal but complete example of the DLL source and EXE source so that we can see what you are actually trying. Snippets and paraphrases are rarely useful (and most often misleading.)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Here's an example that works:
!dll.f90 subroutine dllsub common /mycmn/ j !DEC$ ATTRIBUTES DLLEXPORT :: dllsub,/mycmn/ print *, j end subroutine dllsub
!main.f90 program test common /mycmn/ j !DEC$ ATTRIBUTES DLLIMPORT :: dllsub, /mycmn/ j = 42 call dllsub end program test
D:\Projects>ifort /dll dll.f90 D:\Projects>ifort main.f90 dll.lib D:\Projects>main.exe 42
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Steve,
Out of interest, I decided to test your example with my old VS2005/IVF11.075 combination (on Windows 7). The program builds, but when I execute it I get:
Runtime error! R6034 An application has made an attempt to load the C runtime library incorrectly.
Is this the result of changes since IVF11?
Cheers
Gib
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Gib, did you build the DLL and the EXE in VS2005? If so check that both targets/projects are built with /Release, or both with /Debug specified. Likewise, both targets should be 32-bit or 64-bit.
If you think that the reason is something else, please provide more details.
I just built Steve's example with CVF6.6c (dated 2003), and there were no problems.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
For that older version of Intel Fortran, add /libs:dll to the ifort command for the main program.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
That did it, Steve.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My real code does have the s at the end. I am looking at it now.
I entered:
!DEC$ ATTRIBUTES DLLEXPORT :: GETRESERVES
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I don't see the COMMON in that directive.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page