From: Hoehle, Joerg-C. <Joe...@t-...> - 2005-11-29 10:32:22
|
Hi, xu yong writes: >(close-foreign-library "user32.dll") > >I got message which says ---#<INVALID FOREIGN POINTER... This is normal: CLISP protects you from calling functions of a closed = library. I.e. a valid library pointer becomes invalid after closing the = library. The other pointers (such as foreign function objects) derived = from this pointer become invalid at the same time, and clisp will = complain about calling such a function. Try it out! > MessageBox function resides in user32.dll. >it would be very in-efficient because,I guess, >the lib loading and unloading happen every time the lib=20 >function is called. I wouldn't bother about opening a library such central as user32.dll = several times. It's very likely to be already in use by the system = (possibly even CLISP itself?) and therefore need not be reloaded from = disk. You're right to raise the question of the lifetime of a library in an = application. Should it o be opened each time a tiny function uses it (which happens rarely?) o be opened at some larger level (i.e. when a group of functions is = entered)? o be opened when my application starts? o be opened when clisp starts? However, you are the one to make choice and provide an answer. One note, though: Executing (Loading) a def-call-out form at top-level = will cause the library to be opened. Therefore I guess that most = clisp-users will only ever use foreign functions that have been opened = when their application (or the clisp image) was loaded. I suppose only few users control exactly the lifetime of a foreign = function object (or rather its associated library). CMO/DCOM would use = this. Regards, J=F6rg H=F6hle. |