After carefully inspecting the symbols from
generated dlls and dlls provided by TradeStation,
I found that symbols occurred with and without the
@decorations. e.g. PPI@4 and PPI.
Adding -Wl,--add-stdcall-alias to the gcc line,
all worked fine.
Could this generally be a requirement for dlls
that are opened at runtime in a fashion similar to
dlopen? If so, then some FAQ annotation would be
in order here:
http://www.cygwin.com/cygwin-ug-net/dll.html
Jim
Jim Kleckner wrote:
I'm using a program called TradeStation that allows
specifying a path name to a DLL, specifying the
signature of a function to call, and then
loading/calling that function. The documentation is
very sparse for how to do this and probably built in
some way that depends in an obscure way on having a
Microsoft compiler such as VisualC++ or VisualBasic to
work properly. I am trying to use GCC under cygwin to
create a DLL that will dynamically open and running
into roadblocks.
A simple test file test.cpp:
#include "windef.h"
extern int __stdcall PPI(int);
__declspec(dllexport) int __stdcall PPI(int notused)
{
return 1;
}
commands used:
gcc -shared -mno-cygwin -Wl,--export-dynamic
-Wl,--export-all-symbols -c vmi.cpp
dlltool -e exports.o vmi.o -l vmi.lib
gcc -shared -mno-cygwin -Wl,--export-dynamic
-Wl,--export-all-symbols -shared exports.o vmi.o -o vmi.dll
The program just says "can't load user function".
I have tried various combinations of commands but am
wondering if there is something I'm missing. I'm
hoping to avoid getting out the ancient copy of VC5
from my shelf...
I will append cyg
Thanks - Jim
Resources for future travelers down this path:
I have looked at a variety of sources describing
using cygwin/gcc tools to build DLLs.
The manual is here:
http://www.cygwin.com/cygwin-ug-net/dll.html
This message contains a bug report with a complex
example that is interesting to examine:
http://www.cygwin.com/ml/cygwin/2000-05/msg00663.html
This one describes a "ld/dlltool/ld/dlltool/ld trick":
http://www.cygwin.com/ml/cygwin/2002-08/msg01002.html
It suggests that what I am trying to do should be
possible by just using the -shared flag.
Christopher Faylor indicates that the cygwin dll
cannot be linked at runtime because it is broken:
http://www.cygwin.com/ml/cygwin/2002-08/msg01042.html
The dllhelpers stuff is also useful:
http://www.neuro.gatech.edu/users/cwilson/cygutils/dll-stuff/index.html
[snip]
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/