that should do it, maybe handy for future reference unregistering a dll > regsvr32 /u mydll.dll
Main Topics
Browse All TopicsMy first trial at using DLL's so this might be really easy for you people:
- I have from a supplier a dll file which contains lots of functions. I need to use these functions within our program (written completely in Excel VBA) and have all the necessary documentation and knowledge to set this up ... however
First trial I did, declared the function "Declare Sub ... Lib ... arguments ...", variables, and so on .. and at the first function call I get:
Run-Time error '53': File not found: myfile.dll
I have moved the dll to all possible locations, including the system32 (NT4.0) directory but at no avail, the message keeps bouncing back.
Do I need to register this DLL (already registered the selection software package from our supplier) in my VBA module? Or what am I doing wrong?
I've been swirming throughout microsoft.com as well, no luck.
Thanks in advance,
calacuccia
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
If its a true DLL in which you utilize its features via "Declare" statements, you don't need to register it. If it is a COM DLL, you do need to register it, but then you use it in a completely separate fashion (i.e., CreateObject(...)).
Post your entire declare statement...and let us know ALL of the locations where the DLL file itself is located.
Azra,
Here is the statement (changed the name)
Declare Sub GET_CALCULATION_FANALONE Lib "mysupplier.dll" (ByRef S1 As Integer, _
ByRef s2 As Integer, ByRef InData As Double, ByRef key As keytype, _
ByRef z1 As Integer, ByRef z2 As Integer, ByRef OUT As Double)
Location of DLL (default)
C:\Program Files\Supplier
Placed DLL myself in my own application path and in C:\WinNT\System32
I will try the regsvr32 command later but I don't think this is necessary... could be horribly wrong of course.
More info:
As soon as I place one of the three dependency files ( name "Dforrt.dll") in the System32 directory, the function works without giving the '53' Run-Time error. However, the supplier of the dll suggests to place this and both other dll files in the program directory (my program), not in the System32 directory.
The error messages from regsvr32 are due to the fact that this is not a COM dll, and thus, does not export necessary functions for registering/unregistering.
By default, a Declare statement searches for the specified file in a predetermined order of directories. I believe the first is the system folder, and then your program's path. Ensure the dll in question and its dependencies arent in the system folder, and only in your program's path. Also, try the declaration minus the ".dll" portion specifying the library name, e.g.,
Declare Sub GET_CALCULATION_FANALONE Lib "mysupplier" ...
Azra,
I do agree on the Regsvr32 part.
But, as soon as I move one of the dependencies out of the system folder, the Run-Time error pops up again.
Also, I only can make it work by specifying the full path in the Lib declaration:
Lib "C:\MyPath\...\mysupplier.
This is not a VB program, but Excel VBA. Isn't there any need somewhere to tell the system to look in the folder where the .xls or .xla and the .dll's reside?
Something in the line of ...
Path = "..." although this of course won't worK.
I have the feeling this should be so simple ;-)
Oh yes, one of the dependency files is called "Msvcrt.dll" and resides in the System32 folder (version 6.00.8797.0) while the one distributed with the mysupplier.dll resides in my program folder and is version 6.00.8397.0
This reminds me of an article I once read: DLL Hell ;-)
Could there be a conflict?
These sort of dlls aren't really part of the issue when talking about DLL Hell. DLL Hell has to do with COM dlls and multiple versions being registered, and programs not knowing which one to load, or loading the wrong one, etc.
Honestly, I see no harm in putting these dlls in the system32 folder. The multiple copies of Msvcrt.dll may be an issue. I would leave the one in the system32 folder and discard the one in your program folder.
My comment about a VB program was just to determine if, for some reason, a regular VB program resolved the path to these dlls differently than your VBA program.
Msvcrt.dll should not be an issue. Leave it in the system32, I believe this is just the visual c run time dll that would normally be placed into the system directory on a regular application install anyways. With the others, place them in system32, maybe move one into the program folder, and try again. Then switch their locations and try again. See if both have an issue of resolving the path to your program folder.
Thanks Azra, your comments were right on.
I'll include the mail I just got from our supplier, and he did confirm the problem was location of the path.
Also thanks to hes & bruintje, of course.
For the moment everything seems running fine.
calacuccia
"From dll distributor"
Judging from your description, you have two separate problems, both related
with file-search paths and file location.
The first one is the one ending with the VB6 RTE 53 dialogue box, which
means that either the mysupplier.dll file or one of its three child DLLs was
not found.
As the problem seems to be solved by moving the three child DLLs into the
System 32 directory, this should mean that the former location (the
directory including the application file) wasn't within the standard search
path for executable files. As this path includes, by default, the current
working directory, this should imply that, willingly or not, this system
variable had been set to something else than the location of your
executable (and DLL) file. Clearly, the problem is the location of the
three child DLLs only, because the "Declare" instruction includes the
complete path to the mysupplier.DLL file (but this can become a source of
troubles in the future, when you will distribute your code to be installed
inside a "C:\Program Files\Something else" directory!).
The problem could be related to the use of the VB compiler in debug mode:
when you run Visual Basic in debug mode, the "Current Working Directory"
system variable is set to the location of the VB6.exe executable, and not
to the location of your compiled code.
This could explain also the second error, producing an error code for "File
Not Found" from inside the DLL, meaning that some archive file (probably
the Nic_ini.ini configuration file, which is the first one to be read from
the DLL) was not found where expected.
I'm sending you the latest release of the DLL file and of its
documentation, as I can't remember which version you did receive. From
version 2.3.0 onwards, there is the option of setting the search path for
archive files to something different from "(Current Working Directory)
\Nicotra_it", which was the only option with earlier versions (see the
chapter on the SET_DLL_PATH function). This can be particularly useful for
exotic system architectures including distributed, LAN based systems. You
still have to solve by yourself the problem of finding the four DLL files:
this is a problem located at the main program level, related with the
architecture and location of your program components and with the specific
settings of the operating system used by your application (and debugger!).
Unfortunately, this is not solved yet...
This morning when I first tried out... seemed OK, but now, it is back into the same state as yesterday.
So I'm posting this pointer to my new question:
http://www.experts-exchang
Business Accounts
Answer for Membership
by: hesPosted on 2002-10-15 at 08:43:16ID: 7334740
Have you tried registering the dll in the system32 directory
regsvr32 myfile.dll