yes, ulrich, i did try the _cdecl in the container dll ... both in the header
protoype and c file , of course ... this made no difference, which did not
suprise me since all projects are configured for _cdecl linkage ... good
suggestion , though ...
issue so that it can be ( or not ... ) duplicated on other machines ...
thank you much for your interest and suggestions ...
btw, cholo's pragma didn't make any difference either ... this did not
optimizations off ( /Od ) ...
gordon wrote:
[...]
3) A quick review of the additional code posted in response to Ben's
request indicates that upon return from the call to "pApuUpdateHWclock"
the stack pointer is indeed restored to its pre-call value ... but, then
on the next call to function "_pApuFubar" the stack is not restored to its
pre-call value ...
4) Now, "_pApuFubar" is simply an alias for the same call to
"pApuUpdateHWclock" ... another name declared which executes the same call
...
5) the only difference between these two calls is the "_asm nop" present
after the first call to "pApuUpdateHWclock" ...
I'm not convinced yet. Have you considered what Alexander Grigoriev said?
Your code looked like this:
| __declspec( dllexport ) void APU_UpdateHWclock(double);
|
| // declared in the calling module
| typedef void (__cdecl *APU_UPDATE_HWCLOCK_FUNC)(double dT);
| APU_UPDATE_HWCLOCK_FUNC pApuUpdateHWclock ;
In one case, the __cdecl is present while in the declaration of
APU_UpdateHWclock() it isn't. Fix this first. If it doesn't help, create a
minimal example so we can try to reproduce it on our machines.
BTW: you can create function typedefs:
namespace apu {
typedef void __cdecl update_hwclock_function(double);
}
which have the same syntax as a declaration but prefixed with 'typedef' and
then create function pointers that look like pointers:
apu::update_hwclock_function* uhc = &APU_UpdateHWclock;
This doesn't change the technical side of this issue, but it makes things a
bit more readable. Just wanted to mention it.
6) finally, this is a very straight forward sequence of function calls,
nothing "tricky" going on at all ...
If you f*** up a function pointer cast you are in trouble. Getting it right
without any compiler-enforceable guide IMHO qualifies as "tricky".
Uli