如何使用导出C++类的DLL进行延迟加载

Ric*_*dle 11 c++ windows dll vtable visual-studio

我有一个DLL one.dll,它使用TwoClasstwo.dllvia 导出的类class __declspec(dllexport).我想one.dll/delayloadtwo.dll,但我得到一个链接错误:

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
Run Code Online (Sandbox Code Playgroud)

这是在发布版本中; 在Debug构建中它可以工作.(我不知道在vtable导出方面Release和Debug之间的区别是什么,我也找不到任何编译器开关或pragma来控制它.)

如何/delayload在发布版本中使用导出类似这样的类的DLL?

dav*_*vka 6

看看这里,似乎该人有完全相同的问题,并找到了解决方法

我设法通过禁用使用SomeClass类的翻译单元上的优化来使延迟加载在发布版本中工作 - 不知何故它消除了对导出的vtable的依赖.

  • 将'删除未引用的代码和数据'选项设置为*否*允许我保持优化.[参考文献](https://msdn.microsoft.com/en-us/library/dn642448.aspx?f=255&MSPPError=-2147217396) (2认同)