2012-03-01 61 views
0

我知道以前有類似的問題,但仍然不清楚。DLL訪問應用程序的數據

我的應用程序有一個類,說ClassAppGraph,代表某種圖形。我需要編寫一個解析ClassAppGraph的對象並執行某些操作的DLL。

如何將我的DLL訪問ClassAppGraph從應用的對象?

我知道我可以一個指針從應用程序發送到該對象的DLL,但隨後如何在DLL知道類是什麼樣子,什麼是它的數據成員和職能?我是否在包含應用程序類聲明的DLL項目中包含了一個.h文件?

是否有任何其他的設計,我可以爲這樣的情況呢?

回答

0

由於您的應用程序加載DLL,它們共享相同的存儲空間,在您的DLL函數可以訪問任何應用程序的內存。只需使全局可訪問的實例(例如全局靜態變量)即可。在DLL源代碼中,包含ClassAppGraph的頭文件,則可以直接在DLL中使用ClassAppGraph *

+0

請注意,運行時環境不會驗證類定義在兩側都是相同的。這意味着類版本和許多微妙的東西(例如默認調用約定,字段包裝和其他編譯器標誌)中的不一致可能導致交互,從而破壞導出對象的DLL視圖。 – 2012-03-01 04:23:09

+0

看起來應用程序和DLL都是由OP編寫的。我不認爲版本衝突會是問題,因爲應用程序仍然與靜態庫鏈接。 – 2012-03-01 05:13:37

+0

@Cred King:是否使全局實例成爲公開對象到DLL的唯一選項?我無法將指向該對象的指針作爲參數傳遞給DLL中的函數嗎? – Ritesh 2012-03-01 22:11:38

0

我會把ClassAppGraph類和實施的DLL,然後在應用程序中使用從DLL實現。很可能我會爲DLL創建一個ClassBaseGraph,並且如果應用程序需要定製類,它可以繼承它。

+0

我需要保持DLL簡約性,因此將類「ClassAppGraph」及其實現引入DLL必須是最後一個選項。 – Ritesh 2012-03-01 22:07:48

相關問題