-2

还有:我写了两个dll项目,一个叫Core.dll,另一个叫Network.dll。在主要(不是核心而不是网络)项目中,我使用类指针 NetworkInterface*。其中 NetworkInterface 是一个纯虚拟类。运行主项目后,我发现 Core.dll 已加载但 Network.dll 没有加载(输出窗口显示)。主要项目依赖于核心和网络。

我没有使用函数 LoadLibrary()。

谢谢。

最好的祝福。

4

2 回答 2

4

如果 NetworkInterface 是一个纯虚拟类,那么根据定义它没有指定任何要链接的目标代码。如果您的主程序不使用 network.dll 中的任何代码,则它不会费心与它链接,也不会在运行时加载它。

于 2013-07-03T04:38:47.497 回答
2

ZDan 说的。

您需要从将返回 NetworkInterface 实例的 DLL 中导出“工厂函数”。

__declspec(dllexport) NetworkInterface* CreateNetworkInterface()
{
     MyClassDerivedFromNetworkInterface *pNI = new MyClassDerivedFromNetworkInterface();
     return pNI;
}

然后在“主要”某处,只需说:

NetworkInterface *pNI = CreateNetworkInterface();

所有这些都假定您正在链接到编译该 DLL 时构建的 network.lib 存根库。

于 2013-07-03T04:47:46.120 回答