Re: Is the use of WINAPI FreeLibray() return value obligated?
Robi-Wan-Kenobi wrote:
After loading the dll, calling a function and unloading the library
the dll still remained being loaded. At least it wasn't possible to
delete the dll file.
it was a code like this:
hDLL = LoadLibrary(clib);
if(hDLL != NULL)
{
call some function... ;
FreeLibrary(hDLL);
}
So far, so good....
While debugging i inserted something like:
bool result = FreeLibrary(hDLL);
Apart from the fact that FreeLibrary(), which is part of a C API will not
return a C++ bool, it should be mandatory to check the returnvalue. In this
particular case, I think you can inspect the result of GetLastError() to
get further info. Make sure you don't make any calls in between that could
change this value.
and with that it worked fine. I was able to delete the dll file.
I found no documentation saying that it is mandatory to catch the
result in some local variable. And it's also very common in C or C++
to ignore the return value of a function if it's not needed.
Has anyone an explanation for that?
There are two explanations that come to mind:
1. Without the returnvalue stored somewhere, the compiler completely removes
the call as part of its optimisations. I can barely imagine such a buggy
compiler, as such a bug would surely have surfaced earlier. It could be
some weird (commandline-)options causing this error though. This is very
unlikely though.
2. Something in between is wreaking havoc on your program. Small changes can
then already be enough to show or hide the error. Try creating a boolean
variable with some other means than the returnvalue of FreeLibrary(). If
that changes anything, or inexplicably the value of hDLL changes, you need
to look for the bug somewhere else. This is the likely reason.
In any case, try to create a minimal testcase that demonstrates the problem.
Typically, in the way of doing so, you will find the error yourself.
Uli
--
Sator Laser GmbH
Gesch??ftsf??hrer: Ronald Boers Steuernummer: 02/858/00757
Amtsgericht Hamburg HR B62 932 USt-Id.Nr.: DE183047360
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]