3 利用DLLs實現數據傳輸
3.1 DLLs中的全局內存
Windows規定:DLLs並不擁有它打開的任何文件或它分配的任何全局內存塊。這些對象由直接或間接調用DLLs的應用程序擁有。這樣,當應用程序中止時,它擁有的打開的文件自動關閉,它擁有的全局內存塊自動釋放。這就意味著保存在DLLs全局變量中的文件和全局內存塊變量在DLLs
沒有被通知的情況下就變為非法。這將給其它使用該DLLs的應用程序造成困難。
為了避免出現這種情況,文件和全局內存塊句柄不應作為DLLs的全局變量,而是作為DLLs中過程或函數的參數傳遞給DLLs使用。調用DLLs的應用程序應該負責對它們的維護。
但在特定情況下,DLLs也可以擁有自己的全局內存塊。這些內存塊必須用gmem_DDEShare屬性進行分配。這樣的內存塊直到被DLLs顯示釋放或DLLs退出時都保持有效。
由DLLs管理的全局內存塊是應用程序間進行數據傳輸的又一途徑,下面我們將專門討論這一問題。
3.2 利用DLLs實現應用程序間的數據傳輸
利用DLLs實現應用程序間的數據傳輸的步驟為:
1. 編寫一個DLLs程序,其中擁有一個用gmem_DDEShare屬性分配的全局內存塊;
2. 服務器程序調用DLLs,向全局內存塊寫入數據;
3. 客戶程序調用DLLs,從全局內存塊讀取數據。
3.2.1 用於實現數據傳輸的DLLs的編寫
用於實現數據傳輸的DLLs與一般DLLs的編寫基本相同,其中特別的地方是:
1. 定義一個全局變量句柄:
var
hMem: THandle;
2. 定義一個過程,返回該全局變量的句柄。該過程要包含在exports子句中。如:
function GetGlobalMem: THandle; export;
begin
Result := hMem;
end;