"File Not Found" error when calling an external DLL
I'm calling an external function from a DLL called verywrite.dll using the following line:
Private Declare Function VeryCreate Lib "verywrite.dll" (ByVal lpFileName As String) As Long
When running the script, the code breaks on "id = VeryCreate(szPDFFilename)" with the error "File not found". I have placed the verywrite.dll file (which contains the verycreate function) within the same directory of the Access Database I'm running. I have also tried placing it in system32 with no luck. The last thing I tried is the full path name to the file instead of just calling verywrite.dll in the declaration. Any ideas as to what I'm doing wrong or how to do this better? Thanks in advance!
Re: "File Not Found" error when calling an external DLL
dlls usually register in the System32 directory. True you can use one in any location but when your calling an API function like that it will only look in the System32 directory. You can place the full path to the dll in the API declaration but it wil not accept variables or dynamic strings.
Best solution is to register the dll and place int he System32 dir.
Re: "File Not Found" error when calling an external DLL
Also, from MSDN.
Quote:
Dynamic-Link Library Redirection
Problems can occur when an application loads a version of a DLL other than the one with which it shipped. Starting with Windows 2000, you can ensure that your application uses the correct version of a DLL by creating a redirection file. The contents of a redirection file are ignored, but its presence forces all DLLs in the application's directory to be loaded from that directory.
The redirection file must be named as follows:
appname.local
For example, if the application's name is editor.exe, the redirection file is named editor.exe.local. You must install editor.exe.local in the same directory that contains editor.exe. You must also install the DLLs in the same directory.
The LoadLibrary and LoadLibraryEx functions change their search sequence if a redirection file is present. If a path is specified and there is a redirection file for the application, these functions search for the DLL in the application's directory. If the DLL exists in the application's directory, these functions ignore the specified path and load the DLL from the application's directory. If the module is not in the application's directory, these functions load the DLL from the specified directory.
For example, an application c:\myapp\myapp.exe calls LoadLibrary using the following path:
c:\program files\common files\system\mydll.dll.
If c:\myapp\myapp.exe.local and c:\myapp\mydll.dll exist, LoadLibrary will load c:\myapp\mydll.dll. Otherwise, LoadLibrary will load c:\program files\common files\system\mydll.dll.
Note It is good practice to install your application's DLLs in the same directory that contains the application, even if you are not using redirection. It ensures that installing your application will not overwrite other copies of the DLL and cause other applications to fail. In addition, other applications will not overwrite your copy of the DLL and cause your application to fail.
Re: "File Not Found" error when calling an external DLL
I dont ever recal MS promoting dll files to be installed in the app path. Seems like asking for trouble.
I recal that by default Windows searches a specific location order when looking for a dll.
Re: "File Not Found" error when calling an external DLL
I believe the default order for searching is from the PATH environment variable. The re-direction method along with the putting the dll or OCX in the app path, allows the use of legacy (aka old stuff!!) modules to be used and will protect your version of a popular third party control from getting overidden in system32.
Re: "File Not Found" error when calling an external DLL
I believe its the app.apth is searched first. Then System32, Windows, amoung other areas.