Cannot find entry point in dynamic link library in ??????.dll
Lately, I 've had quite a few folks looking for help on how to fix a DLL problem. So in this newsletter as well as the next few, I will discuss some of the common problems and fixes for the error messages you get; and I also will discuss how a DLL is used.
The error message "Cannot find entry point in dynamic link library in Shlwapi.dll" is really self explanatory; but only if you understand what an entry point is. An entry point is the memory address inside the DLL that contains the Call being made. Quickly, a Call is a request, using a name like "SHDeleteKey", by a DLL or executable (.exe) program to another DLL to obtain some kind of information or procedure (for further info. on DLL & CALL, please read our page at about DLLs.
The above noted error is caused by the Call not existing in the DLL's Import Table that is being called. The Import Table tells the Calling program at what memory address to enter the DLL.
Lets assume a program that your running that we'll call XWord, is trying to delete a Key in the Registry (FYI: there are two different Calls to two different DLLs that can delete a Registry Key). So, Xword makes the Call "SHDeleteKey" passing the required information along to Shlwapi.dll correctly. Xword, checked the Windows operating system before making the Call and found that it was XP, so this Call is safe to be made. But some program has replaced Shlwapi.dll with an older version, 4.71. The Call SHDeleteKey was not available until version 4.72. XP is shipped with a 5.??? version.
So now what happens is, Windows loads Shlwapi.dll into memory and looks for the memory entry point, which does not exist. Xword is waiting for a Call back from Shlwapi.dll so that Xword can continue on. Needless to say, since there is no entry point for this Call, Xword will never get the Call back, Xword will wait a long time or crash, or Shlwapi.dll will crash, or cause an error in the Kernel32.dll.
Now how do you fix this? Well, in our error message "Cannot find entry point in dynamic link library in Shlwapi.dll" , Windows told us the name of the dll with the problem, Shlwapi.dll. It also told us that the version we currently have is not correct for Xword, this is represented by the statement "cannot find entry point". There is a third possibility, another dll that Xword Called is making a Call to Shlwapi.dll. This third possibility will be discussed further on in this newsletter.
So let's look at what version of Shlwapi.dll is in our System folder, doing a properties check. Let's say that the version found is 4.71, now we need to know what version came with Windows XP. Remember that you probably would not have known that the Call "SHDeleteKey" did not exist in the earlier versions if you had not read this newsletter. And at this point we really do not know what Call is being made to Shlwapi.dll to cause the error.
In order to find the version that came with Windows XP you would need to locate the file Shlwapi.dl_ in your Windows Installation Files and expand it to do a Properties check. Much easier and faster is to run System Sentry's "System Version Checker" and compare the current version to the one that came with XP. If XP's version is higher, have System Sentry expand and install the file for you, then rerun the program to see if it fixed the problem. If you still get the error message then Xword is probably not for XP. But remember there still is a third possibility.
What happens if both the current file and XP's files are exactly the same? Well this means one of two things. Either Shlwapi.dll is corrupt, which I would check first by replacing the file with System Sentry; or Xword is not capable of running on XP. Now remember I used the example "SHDeleteKey" for my explanation, but suppose it was the other way around. There was a Call "GetDiskFreeSpace" that Windows 95 had, this Call is no longer available in Windows 98 and up, it changed to "GetDiskFreeSpaceExA". All this means is that you need a newer version of Xword and there is nothing wrong with Shlwapi.dll. But again, you do not know what the Call being made is, I will tell you how to find this problem in a few moments.
Now let's cover the third possibility. Let's say that Xword Calls Imagehlp.dll with the Call "MakeSureDirectoryPathExists" to create a new Folder for its temp files. Imagehlp will Call Dbghelp.dll to make the new folder. Here we have a sub dependence, Dgbhelp.dll, in return Dgbhelp.dll will Call upon Kernel32.dll to do the job for Xword. Here we have a 3 level dependence.
There is a way you can find out what Calls a program or DLL make to another DLL. Microsoft has a program Dependency Walker that will tell you what DLLs a program uses, and what Calls are in a given DLL. Using Dependency Walker can take a lot of time to do the research. However, even easier is the new System Sentry. System Sentry can give you all the information you need, level by level. Telling you all the Calls made from Imagehlp.dll to all of its dependences. Click on a sub dependent Dgbhelp.dll and see all of its dependents and its Calls. System Sentry will even display all the Calls that Dgbhelp.dll will answer, and tell you what Calls Imagehlp.dll are making to Dgbhelp.dll that do not exist in Dgbhelp.dll.
With this information you can establish what file is causing the problem and replace it with the version you need. But what version is that? Yet to come!