2011-12-15 13 views
1

我試圖寫一個dll,它將存儲在調用之間傳遞給它的一些值。如何在C++ dll中實例化一個類,以便它在內部函數調用之間保持內存?

目前,我有:

MyDll.h:

namespace MyDllNamespace 
{ 
    class MyClass 
    { 
    public: 
     static int getValue(int &a); 
    }; 
} 

MyDll.cpp:

#include "ALERTDataAnalysisLibrary.h" 
#include <stdexcept> 
using namespace std; 

namespace MyDllNamespace 
{ 
    int storedValue=0; 
    int MyClass::getValue(int &a) 
    { 
     a=a+storedValue; 
    } 

} 

MYDLL.DEF

LIBRARY MyDllLibrary 
EXPORTS 
    getValue @1 

的想法是,第一次被調用時,它返回t他傳遞了值,第二次調用它返回傳遞的值和先前傳遞的值的總和。 (這是有點削減,最終版本將不得不在陣列上,並與更多的價值,但一次一步!)

我想我想要做的就是停止getValue是靜態的。這意味着在DLL中實例化一個類(可能在加載時),並在其中存儲數據。然後公開該類的一個函數。我不知道這是否是這樣做的,在經過多次搜索後我沒有發現任何類似的東西。

+1

如果你想要做的是進程間通信,那不是做這件事的方法。查找「進程間通信」,瞭解如何實現這一目標。 – 2011-12-15 16:38:13

+1

你的DLL在調用之間卸載並重新加載了嗎? – 2011-12-15 17:16:07

回答

1

你可以導出整個類(選擇使用PIMPL方法,但是這不是強制性的):

在你的DLL頭文件 「MyDll.h」,寫上如下:

#ifdef MYDLL_EXPORTS 
#define MYDLL_API __declspec(dllexport) 
#else 
#define MYDLL_API __declspec(dllimport) 
#endif 

class MYDLL_API MyClass 
{ 
... 
}; 

然後,確保只在你的DLL項目中定義了MYDLL_EXPORTS,所以當你編譯你的DLL時,你的類是「dllexported」,而當它包含在你的主應用程序中時,它是「dllimported」。

此外,您不再需要.def文件。

相關問題