久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Delphi中DLL數(shù)據(jù)共享

 quasiceo 2012-12-20

Delphi中DLL數(shù)據(jù)共享

在16位Windows時(shí)代,DLL內(nèi)存的處理和32位Win32的處理時(shí)不同的,。在16位的DLL中,,可以在不同應(yīng)用程序之間共享全局內(nèi)存。換句話說(shuō),,如果在16為DLL中聲明了一個(gè)全局變量,,任何調(diào)用該DLL的引用程序都可以修改這個(gè)變量,這種修改回反映到其他應(yīng)用程序中,。

在Win32中不存在這種DLL的全局?jǐn)?shù)據(jù)共享,。由于每個(gè)應(yīng)用程序進(jìn)程把DLL映射到自己的地址空間中,DLL的數(shù)據(jù)也映射到了應(yīng)用程序進(jìn)程空間中,。所以每個(gè)應(yīng)用程序具有自己的DLL數(shù)據(jù)實(shí)例,。一個(gè)應(yīng)用程序?qū)LL中全局?jǐn)?shù)據(jù)的修改不會(huì)影響到其他應(yīng)用程序。

那如何實(shí)現(xiàn)在Win32下DLL數(shù)據(jù)共享呢,,這是可以用內(nèi)存映射文件來(lái)儲(chǔ)存共享數(shù)據(jù),。內(nèi)存映像文件可以映射一個(gè)文件,一個(gè)文件中的指定區(qū)域或者指定的內(nèi)存塊,,其中的數(shù)據(jù)就可以用內(nèi)存讀寫指令來(lái)直接訪問,,而不必頻繁的調(diào)用I/O系統(tǒng)函數(shù),從而提高了文件存取速度和效率,。

映像文件的另一個(gè)重要應(yīng)用就是用來(lái)支持永久命名的共享內(nèi)存,。要在兩個(gè)應(yīng)用程序之間共享內(nèi)存,可以在一個(gè)應(yīng)用程序中創(chuàng)建一個(gè)文件并映射之,,然后另一個(gè)程序可以通過打開和映射該文件,,并把它作為自己進(jìn)程的內(nèi)存來(lái)使用。

創(chuàng)建映像文件

CreateFileMapping(
   hFile: THandle;
   lpFileMappingAttributes:
   PSecurityAttributes;
   flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD;
   lpName: PChar
): THandle;
  • hFile:是調(diào)用FileOpen或FileCreate函數(shù)后返回的文件句柄,。如果不是共享文件而是共享內(nèi)存區(qū)域,,在這里需要設(shè)為$FFFFFFFF(DWord(-1)).
  • lpFileMappingAttributes參數(shù)是文件映像的安全屬性結(jié)構(gòu)(一般設(shè)為nil)。
  • flProtect 參數(shù)是文件的保護(hù)類型(PAGE_READ為可讀 PAGE_WRITE為可寫 PAGE_READWRITE為可讀寫)
  • dwMaximumSizeHigh 參數(shù)用于指定文件映像的大小的高32位,。
  • dwMaximumSizeLow 參數(shù)用于指定文件映像的大小的低32位,。
  • lpName 參數(shù)用于指定映像名。

如果函數(shù)調(diào)用成功,,將返回文件映像的句柄,。

打開映像文件

OpenFileMapping(
    dwDesiredAccess: DWORD;
    bInheritHandle: BOOL;
    lpName: PChar
): THandle;
  • dwDesiredAccess 用于指定訪問數(shù)據(jù)的模式(FILE_MAP_READ為可讀 FILE_MAP_WRITE為可寫 FILE_MAP_ALL_ACCESS為可讀寫)
  • bInheritHandle 參數(shù)指定OpenFileMapping 函數(shù)返回的句柄在以后新建的子進(jìn)程中是否得到繼承。
  • lpName 參數(shù)用于指定映像名,。

如果函數(shù)調(diào)用成功,,將返回文件映像的句柄。

映射到本地進(jìn)程

MapViewOfFile(
    hFileMappingObject: THandle;
    dwDesiredAccess: DWORD;
    dwFileOffsetHigh,dwFileOffsetLow,dwNumberOfBytesToMap:DWORD
): Pointer;
  • hFileMappingObject 參數(shù)通過CreateFileMapping 或 OpenFileMapping返回的文件映像句柄,。
  • dwDesiredAccess 用于指定訪問數(shù)據(jù)的模式(FILE_MAP_READ為可讀 FILE_MAP_WRITE為可寫 FILE_MAP_ALL_ACCESS為可讀寫)
  • dwFileOffsetHigh 參數(shù)用于指定數(shù)據(jù)在映像文件中的起始位置的高32為
  • dwFileOffsetLow 參數(shù)用于指定數(shù)據(jù)在映像文件中的起始位置的低32位,。
  • dwNumberOfBytesToMap 參數(shù)用于指定需要映射的字節(jié)數(shù),設(shè)為0表示文件或內(nèi)存區(qū)域的全部,。
如果函數(shù)調(diào)用成功將返回?cái)?shù)據(jù)映射的起始地址,,這是本進(jìn)程中可以直接訪問的內(nèi)存地址指針。

關(guān)閉內(nèi)存映射

UnmapViewOfFile(
    lpBaseAddress: Pointer
): BOOL;
  • lpBaseAddress為MapViewoffFile返回的內(nèi)存指針,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多