Larry Hall wrote: > At 01:14 PM 9/22/2004, you wrote: > >>>-----Original Message----- >>>From: Frédéric ORMANCEY >>>Sent: 22 September 2004 18:07 >> >>>I did it, but it don't work ! >> >> Ah, ok, that was not clear from your last message! >> >> >>>The --enable-stdcall-fixup option suppress one warning on top >>>of linker output trace : >>> AVERTISSEMENT: résolution de _GetModuleHandleA par un >>>lien vers [EMAIL PROTECTED] >>>and unfortunatly leave ALL other errors with no effect on it. >> >> I see. Hmm. That's very strange; it should affect all the errors - that >>is, if they're all the same kind of error. OTOH it could be that you've >>gotten the calling conventions wrong with the other pragmas, so that's why >>--enable-stdcall-fixup doesn't work for them; there must be some different >>reason why the errors are caused, since they behave differently. >> >> You might care to experiment with the "--enable-auto-import" and, failing >>that, "--enable-extra-pe-debug" options as well. > > Or Frédéric could try specifying the link symbol he wants in the pragma > as suggested by an earlier poster (sorry, the thread is broken in the > archives and I didn't put any effort into wading through the messages > to trace it all back to that message).
That was me - but it seems Dave Korn's post broke the thread. But isn't it easy enough to sort messages on subject? Anyway, I tried a noddy example, as follows... [EMAIL PROTECTED] ~ $ cat imp.adb procedure imp is procedure Doit(A : integer; B : boolean; C : character); pragma Import (Stdcall, Doit, "FormatMessageA"); begin Doit(1, true, 'x'); end; [EMAIL PROTECTED] ~ $ gnat compile imp.adb gcc -c imp.adb [EMAIL PROTECTED] ~ $ nm imp.o 00000000 b .bss 00000000 d .data 00000000 t .text U [EMAIL PROTECTED] 00000000 T __ada_imp So Gnat is generating a stdcall-style linker symbol with @12 (the parameter block size) correctly appended. If Frédéric is not seeing this with stdcall, it is probably an indication that the specification used for Doit is wrong - ie it hasn't been defined to take any parameters. If you change the pragma line to pragma Import (Stdcall, Doit, Link_Name => "FormatMessageA"); the symbol is generated as U [EMAIL PROTECTED] so you can generate it without the leading underscore, but with the stdcall postfix, if you wish. [Note - the above is just an example - the *real* FormatMessageA should take 7 words (28 bytes) of parameters, and the Ada spec should match the kernel32 definition.] -- Cliff -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/