[英]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.