We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Cant Find Entry point to DLL ?

Medium Priority
516 Views
Last Modified: 2013-11-08
The error 'Cant find entry point to xxxxx.dll ' comes up when I run my VB program. the file xxxxx.dll is created from Fortran Power Station - in fact I am just trying to get the example they give for using Fortran DLL's in VB to work. Any Ideas ?
Comment
Watch Question

Commented:
Check the exported names table of the DLL by right-clicking it in the explorer and selecting quickview. Make sure that the function that you have created is listed there.

Commented:
Your calling a 16 bit call with a 32 bit machine..  ExitWindows for example is no longer in Win95 and will give you this error.  The new function is ExitWindowsEx with the same params..

Author

Commented:
Fortran Power Station is only 32 bit and the example I am doing is as follows :

In Fortran :

SUBROUTINE ARRAYTEST(arr)
   !MS$ATTRIBUTES DLLEXPORT :: ARRAYTEST
   REAL(4)  arr(3, 7)
   INTEGER i, j
   DO i = 1, 3
      DO j = 1, 7
         arr (i, j) = 11.0 * i + j
      END DO
   END DO
END SUBROUTINE

This compiles fine to a .dll and a .lib file which I then call from VB as follows :

VB Module :

Declare Sub ARRAYTEST Lib "c:\mark\dlltest" (Myarray As Single)

Then I call it from a subroutine :

Static arr(1 To 3, 1 To 7) As Single
Call ARRAYTEST(arr(1, 1))

When I dont get the path right it says cannot find dll, but as I no longer get that message I assume it is finding the dll. The error then is 'Cant find dll entry point ARRAYTEST in C:\path\dlltest.dll"

As fortran is 32 bit it cant be that it is calling a 16 bit dll so what can I do to make this work. Is it something to do with DLLMAIN or my dll linking options ?

Commented:
This is when you should do what I suggested, to verify that it is really exported as ARRAYTEST. Sometimes functions get a suffix or prefix when exported.

Author

Commented:
I right clicked it in Explorer and used quickview but could not see an 'Exported names table' or even the word arraytest with or without prefixes or suffixes.

Commented:
What did appear when you quickviewed it? The exact header of the section I'm interested in is "Export table". If you would like, you could e-mail your DLL to andreas.hansson@mbox303.swipnet.se, and I could try to see if I can work anything out.

Author

Commented:
Adjusted points to 200
Commented:
In stead of :
Declare Sub ARRAYTEST Lib "c:\mark\dlltest" _
      (Myarray As Single)
Try:
Declare Function ARRAYTEST Lib "c:\mark\dlltest.dll" _
      (Myarray As Single)

I also have a VB4 (16bit) and a VC1.52 (DLL) example on my site if you want to check it out.  Arrays are not really a good thing for VB.  That is straight from the MS mouth.  Strings and Integers are the best and they told me that Strings really were not that great, but I had no problems with them..

L8r,
Chizl

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Commented:
I tried removing the .dll extension but I still go the 'can't find entry point' error message. Surely most people would not be content with just passing integers to and from dll's. Is there no way arrays can be passed without writing to a data file, then shelling to the fortran executable which reads the data file. - Slow and cumbersome.

Author

Commented:
I know I am comming in on the tail end here but I do have a thought.
Since you are using 32 bit, the function or sub names are
case aware.
If the DLL exports the function as ArrayTest and you call it
ARRAYTEST, this WILL NOT work.
If the case is not correct, you will get the error that you are getting.

Commented:
A lot has happened since I posted the last comment..   Ben your right and should be given the points if that's the problem..   Also if your trying to pass in an Array as single I dont believe this will work either..  The thing your looking for is "Array as Variant"..  This is the 32 bit thing is now well know as the way to pass VB arrays..  I use VC5 as the backend to pass my VB arrays into and it catches the VB arrays with SafeArrays..  I don't know about Fortran and don't know if Fortran even has SafeArrays, but you might want to look into it..

L8r,
Chizl
chizl@karland.com
http://www.karland.com/

Commented:
Thanks guys - it was the case sensitive issue that I got wrong - schoolboy error on my part I'm afraid.

Author

Commented:
That should of been Ben's points..  Sorry Ben!
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.