On Fri, 26 Dec 2003, Dmitry Timoshkov wrote:
"Kevin Atkinson" kevina@gnu.org wrote:
That is a heck of a lot of work to link with a DLL that is not compiled with an exports table.
I don't understand you. If a DLL exports something (i.e. has a not zero export directory in the PE header), then it definitely has an export table.
Sorry. I mean what it is compiled with a .def file rather than using __declspec(dllexport).
Furthermore, when I use an exports table (ie compile with /def in VC++) mingw has problems linking with the DLL. It could be that I need to pass in special options. Simply including the ".lib" file as a link object is not enough.
MinGW (or rather Windows ld port) has its own heuristics for resolving symbols in external libraries. So, just stick to rules and read its documentation. I have an old dllhelpers-0.2.6.tar.gz addon for MinGW with samples how to use DLLs with MinGW, you could find something similar on the net.
I'd say that the key of your problems is a bug in MS linker which exports decorated API names. That's similar to an attempt to link against a DLL with C++ style decorated exports created by a compiler from another vendor.
If the names are not decorated in that fashion mingw has a problem linking with it. When linked the linker is looking for the names with the '@' decoration.
I would hardly call the '@' decoration a bug, it is the way it is done in windows. It is spelled out in the documentation that way.
It seams rather strange that wine has so much problems linking with a DLL not compiled with an exports table. Am I the first one who attempted this.
Probably. Don't forget: Wine is alpha software. Every your contribution makes it better, as it has become much better with the help of many other people.
Yeah, yeah. I don't know the least thing about windows linking or how to fix wine to make it handle this situation better. So I guess if I don't contribute a patch to handle this it won't get fixed anytime soon.