If you encounter the error LIST DLLs will show how you declared functions. It'll not point out where you made a wrong declaration, but it has to be in some source code, even if it's now in a module you built into an EXE, APP or VFP (COM) DLL and use that.
For example do this and you'll see LIST DLLs shows you what function you declared (and the upper/lower casing used) besides what alias name you used:
Code:
DECLARE INTEGER ShellExecute IN shell32 as ShallExecute;
INTEGER hWindow, STRING lpOperation,;
STRING lpFile, STRING lpParameters,;
STRING lpDirectory, INTEGER nShowCmd
List Dlls
results in
Code:
Declared DLLs:
ShellExecute ShallExecute c:\windows\system32\shell32.dll
So you see whether you made a case error in the first column, the name as it has to be found in the DLL, and can see by which alias name you decalred it, here Shall instead of Shell to demonstrate the difference.
No matter where that error is in your sources, it is not an error of shell32.,dll, it is in some VFP DECLARE call, no doubt about that.
Even if you use
Rich (BB code):
DECLARE INTEGER shellexecute IN shell32 as ShellExecute;
INTEGER hWindow, STRING lpOperation,;
STRING lpFile, STRING lpParameters,;
STRING lpDirectory, INTEGER nShowCmd
Calling ShellExecute with the right capitalization of the alias name will error with the message "Cannot find entry point shellexecute in the DLL" because the alias name is translated with shellexecute as is the function name highlighted red. The only reason to give an alias name is for functions that have a name illegal in VFP, Windows API does not have such names, but third party DLLs could have. Anyway, shell32.dll includes ShellExecute, not shellexecute, nor Shellexecute, nor shellExecute, nor SHELLexecute nor ShElLeXeCuTe - only ShellExecute.
And no matter how hard you try to produce the error with correct function name but wrong alias names or anything else, you only get the error when you specify the red name wrong in some declare that runs before you make the call of the function to which the entry point in the DLL is not found. If you have that name right, even if you call the alias BONKERS, calls of BONKERS() will work. And calls of BoNKERS() would cause the error message "File 'bonkers.prg' does not exist." a comlpetely different error. So the error Connot find entry point tells you you 1. had a DECLARE, that 2. loaded the DLL function (actually created a definition/idea how VFP later would look up these calls and verify correct parameterizuation) and you 3. didn't and don't have a RAM problem with the DLL loaded being too large. So, really no RAM problem, clearly without any doubt just a DECLARE problem. You also don't get this error when there was a CLEAR DLL or CLEAR ALL, because it only comes up when there is a wrong declare.
And last not least, and what I also already mentioned, if you declare the right function name ShellExcute, but in the wrong DLL, that also causes the error:
Code:
DECLARE INTEGER ShellExecute IN kernel32;
INTEGER hWindow, STRING lpOperation,;
STRING lpFile, STRING lpParameters,;
STRING lpDirectory, INTEGER nShowCmd
ShellExecute()
And as the error message then also is "Cannot find entry point ShellExecute in the DLL." it doesn't tell in which DLL, so you have to find the DECLARE that's wrong. LIST DLLS will then show that ShellExceiute was declared in kernel32.dll, the wrong dll. But without any doubt, the problem is in the DECLARE when that error message comes up, not in the call. It's just only revealed with the call as VFP does not verify the entry point when you do the DECLARE.