Home »
Public Forums »
archive »
Using CALL_EXTERNAL with C++ Code
Re: Using CALL_EXTERNAL with C++ Code [message #37874 is a reply to message #37856] |
Tue, 03 February 2004 20:08  |
the_cacc
Messages: 104 Registered: October 2001
|
Senior Member |
|
|
ebertf@gmx.de (Florian Meyer) wrote in message news:<14e53261.0402030142.1a7147a8@posting.google.com>...
> I got a solution for my problem. For anyone, who might be interested:
> When using the C++ Compiler the names in the EXPORT LIST are decorated
> with funny tags.
>
> An example:
> An entry in your DLL, lookin like this:
>
> _declspec(dllexport) IDL_INT IDL_CDECL dllquest(int argc, void
> *argv[])
> {
> <your C++ code>
> }
>
> is causing a name in the exportlist like this:
>
> ?dllquest@@YAFHQAPAX@Z
>
> With CALL_EXTERNAL you need to call the second one, then it works and
> you can process C++ Code in IDL. Using C-Compiler (option /Tc with cl)
> the names are equal.
> How the the Compiler changed the names can be obtained with a command
> from the DOS Prompt on the OBJECT File the compiler created:
>
> DUMPBIN <*.obj-File> /SYMBOLS
>
> There you can find both names.
>
> I think there are other ways to work around this problem (not to call
> this weired decorated names) with a *.def File. But I don�t know how
> to do that. If anybody can give a little 'manual' how to create such a
> DLL I were very grateful.
>
> Florian
I'm not clear whether you've "solved" the problem or merely hacked in
the weird function names in place of the ones you expected.
A less evil hack is compiling with the /TC flag (NB. not /Tc - that's
different). It may mean you can't overload your functions though,
since C++ uses the extra tags to specify argument types so functions
you give the same name are (internally by C++) given different names.
|
|
|
Current Time: Wed Oct 08 16:49:18 PDT 2025
Total time taken to generate the page: 0.00848 seconds