[英]Pointers in and out of DLLs
是否可以将指向对象的指针传递到DLL中,对其进行初始化,然后在主应用程序中使用已初始化的指针? 如果可以,怎么办? 是否有关于该主题的好文章,也许是教程?
我已经阅读了这篇文章http://msdn.microsoft.com/zh-cn/library/ms235460.aspx但这似乎并没有给我带来什么帮助。 也许我误会了...
是的,这很好,但是假设您的DLL已动态分配了缓冲区所指向的数据,则在释放它时必须小心。 有几种方法可以解决此问题:
是。
假设您使用Microsoft Visual Studio作为开发环境,则可以直接从dll中导出类。 向您的dll项目中添加一个定义,例如BUILDING_THE_DLL
,下面的代码片段将从dll中导出一个c ++类批发。
#ifdef BUILDING_THE_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class EXPORT DllClass
{
....
};
这是一个高度耦合的解决方案,并且仅当您使用相同的开发环境来构建应用程序及其dll并在类定义以任何方式更改时都重新构建两者时才起作用。 MFC库大量使用此方法。
为了在dll和应用程序之间实现更大的独立性,通常会定义一个相对不变的接口,并使用该接口使构建更加独立,并可能使用不同的构建环境。
您的dll中的实现看起来像这样:
struct IMyInterface {
virtual void Destroy() =0;
virtual void Method() = 0;
};
class MoDllObject : public IMyInterface
{
// implementation
};
bool EXPORT DllGetInterface(IMyInterface** ppOut)
{
*ppOut = new MyDllObject();
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.