From: newsham AT lava DOT net (Tim Newsham) Subject: dll question 28 May 1998 02:49:29 -0700 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit To: gnu-win32 AT cygnus DOT com Hi, I have a program which is trying to load a dll at runtime. The program uses LoadLibraryEx to load the library in, then uses GetProcAddress to get addresses of various entry points (with appropriate cast operations). This much seems to work properly. I am having problems, however, when I try to actually call one of the procedures. The stack pointer (esp) seems to be incorrect after a call to the procedure. In particular I am passing in 3 4-byte arguments (12 bytes). The emitted code looks like: call *%ebx addl %0xc, %esp After the call, the stack pointer seems to be off by 12 bytes (too high). Its as if the called procedure popped the arguments itself, leaving the stack as it was prior to the caller pushing, and then the caller also added 12 to the stack pointer to pop the values, after the function returned. Is this analysis correct? If not, what is actually going on here? If so, is there some way to tell the compiler that the callee will be restoring the stack and that the caller shouldn't bother? Tim N. - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".