是否可以將指向對象的指針傳遞給DLL,初始化它,然後在主應用程序中使用初始化的指針?如果是這樣如何?有沒有關於這個主題的好文章,也許是一個教程?進出DLL的指針
我已閱讀此文http://msdn.microsoft.com/en-us/library/ms235460.aspx但這似乎並沒有讓我在任何地方。也許我誤解了它......
是否可以將指向對象的指針傳遞給DLL,初始化它,然後在主應用程序中使用初始化的指針?如果是這樣如何?有沒有關於這個主題的好文章,也許是一個教程?進出DLL的指針
我已閱讀此文http://msdn.microsoft.com/en-us/library/ms235460.aspx但這似乎並沒有讓我在任何地方。也許我誤解了它......
是的,這是好的,但假設你的DLL動態地分配數據由指向的緩衝區,你必須小心如何你釋放它。有幾種方法來處理這個:
是的。
假設您使用Microsoft Visual Studio作爲您的開發環境,您可以直接從dll導出類。添加一個定義到您的dll項目,如BUILDING_THE_DLL
和下面的代碼snippit將從dll導出一個C++類批發。
#ifdef BUILDING_THE_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class EXPORT DllClass
{
....
};
這是一個高度耦合的解決方案,如果你構建應用程序,並使用相同的開發環境的DLL,並重建只能每次都以任何方式類定義的變化。這個方法被MFC庫重用。
爲了實現dll和app之間更大的獨立性,通常會定義一個相對不可變的接口,並使用它來使構建更加獨立,並可能使用不同的構建環境。
在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;
}
爲什麼這與初始化「內部」函數中的指針有什麼不同? – schmrz 2009-09-07 17:54:35
我能想到的唯一事情就是使地址空間不同。 DLL是否使用與其父應用程序/調用應用程序不同的堆? (我確實意識到這種實現並不合理。) – Chezz 2009-09-07 18:11:27