Solved

Cant Find Entry point to DLL ?

Posted on 1997-06-11
13
427 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 ?
0
Comment
Question by:sl311
  • 5
  • 4
  • 3
  • +1
13 Comments
 
LVL 5

Expert Comment

by:y96andha
Comment Utility
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.
0
 
LVL 4

Expert Comment

by:Chizl
Comment Utility
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..
0
 

Author Comment

by:sl311
Comment Utility
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 ?
0
 
LVL 5

Expert Comment

by:y96andha
Comment Utility
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.
0
 

Author Comment

by:sl311
Comment Utility
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.
0
 
LVL 5

Expert Comment

by:y96andha
Comment Utility
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.
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:sl311
Comment Utility
Adjusted points to 200
0
 
LVL 4

Accepted Solution

by:
Chizl earned 230 total points
Comment Utility
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
0
 
LVL 4

Expert Comment

by:Chizl
Comment Utility
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.
0
 

Author Comment

by:sl311
Comment Utility
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.
0
 
LVL 6

Expert Comment

by:BenClark
Comment Utility
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/
0
 
LVL 4

Expert Comment

by:Chizl
Comment Utility
Thanks guys - it was the case sensitive issue that I got wrong - schoolboy error on my part I'm afraid.
0
 

Author Comment

by:sl311
Comment Utility
That should of been Ben's points..  Sorry Ben!
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now