RichieHindle RichieHindle - 1 month ago 16
C++ Question

How to use delay loading with a DLL that exports C++ classes

I have a DLL

one.dll
that uses a class
TwoClass
exported from
two.dll
via
class __declspec(dllexport)
. I'd like
one.dll
to use
/delayload
for
two.dll
, but I get a link error:

LINK : fatal error LNK1194: cannot delay-load 'two.dll' due to import
of data symbol '"__declspec(dllimport) const TwoClass::`vftable'"
(__imp_??_7TwoClass@@6B@)'; link without /DELAYLOAD:two.dll


That's in a Release build; in a Debug build it works. (I don't know what the difference is between Release and Debug in terms of vtable exports, nor can I find any compiler switches or pragmas to control it.)

How can I use
/delayload
with a DLL that exports classes like this in a Release build?

Answer

Have a look here, seems that the person had exactly the same problem and found a workaround

I managed to get the delay loading to work in release build by disabling the optimizations on the translation unit that was using SomeClass class - somehow it took away the dependency on exported vtable.

Comments