bg-greece wrote:
> You mean I should create the DLL with cygwin/gcc?
> Putting aside that it needs a lot of time to do the porting, it contradicts
> the fact that I can perfectly call Windows system DLL's like user32,
> kernel32 and so on using Win32::API.
Well, to be honest I have never done what you're trying to do FROM
CYGWIN. I also note that someone has, because Win32-Process-Info 1.006
has a "pass" from Cygwin (see
http://testers.cpan.org/show/Win32-Process-Info.html).
On the other hand, if you have the calling sequence right (as you say
you do) and if the version of C doesn't matter (as you say it doesn't),
then we just proved your code works.
But it doesn't. At this point, I generally ask myself "what is it that I
know to be true, but which is in fact not true?". The possibilities seem
to me to be:
1) the calling sequence is in fact coded incorrectly in Perl. I have no
experience with the prototype version of the interface, but the
traditional interface call in Bart Lateur's response looks right to me
given the C signature in your original note, and you say that didn't work.
2) Different compilers _can_ produce different calling sequences, so
that's what I was focusing on. You say calls to Kernel32 work, which
suggests that this isn't the problem, but doesn't prove it, since we
don't know that Kernel32 was written in Visual C++. But we _do_ know
that Visual C++ can call kernel32.dll. Have you read kernel32.h, and
made sure your signatures are specified the same way? C++ wants to
mangle function names (that's how overloading works), and it's possible
that there is more than one way to handle the call stack. A mangled
function name would probably result in a failure to import the function,
but there are probably other things that could go wrong.
3) Something else entirely. Arthur Conan Doyle was wrong when he had
Sherlock Holmes say something like "When you have eliminated everything
else, the remaining possibility, however improbable, must be the truth."
The problem with the Sherlock Holmes approach is that it assumes you
really know what every single possibility is.
Tom Wyant