I need to forward a set of symbols from one DLL to another (to support some versioning scheme, PEP 384 if you wonder). It works fine for functions; I write a module definition file, saying
LIBRARY "python3"
EXPORTS
PyArg_Parse=python32.PyArg_Parse
PyArg_ParseTuple=python32.PyArg_ParseTuple
PyArg_ParseTupleAndKeywords=python32.PyArg_ParseTupleAndKeywords
[...]
However, it fails for data. If I say
PyBaseObject_Type=python32.PyBaseObject_Type
then the linker complains that PyBaseObject_Type is an unresolved symbol, even though it actually is exported from python32.dll. Looking at the import library, I notice that, for data, there is only the _imp__
symbol, so I tried
PyBaseObject_Type=python32._imp__PyBaseObject_Type
The linker does actually create a DLL now, however, in this DLL, the forwarding goes to the _imp__
symbol, which then cannot be resolved at runtime. I also tried putting DATA into the line (with or without the _imp__
); this doesn't make a difference.
IIUC, forwarding data should work fine, since the data is declared as __declspec(dllimport)
for any importer of the DLL, so the compiler should interpret the reference correctly.
So: How can I generate a DLL that does data forwarding?