CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

用DLL共享内存,为什么对出来的值,不是写入的值(申请内存我用的是gmem_DDEShare),请高手帮忙

楼主jupiterhunter(木猎)2003-11-01 16:38:27 在 Delphi / Windows SDK/API 提问

一个dll,一个写入端,一个接受端  
    library   jhdll_dpr;  
  uses  
      SysUtils,  
      Classes,  
      forms,  
      windows;  
   
  var  
    hMem:THandle;  
  {$R   *.res}  
   
      function   GetGlobalMem:THandle;export;  
      begin  
        result:=hMem;  
      end;  
   
    exports   GetGlobalMem;  
  begin  
   
  hMem:=GlobalAlloc(GMEM_ZEROINIT   and   gmem_MOVEABLE   and   gmem_DDEShare,512);  
  if   hmem=0   then   application.MessageBox('提示','无法申请内存空间')   ;  
  end.  
  写入端:  
  var  
      hMem:   THandle;  
      pMem:   PChar;  
  begin  
  hMem:=0;  
  hMem   :=   GetGlobalMem;   {获得全局内存块的句柄}  
  if   hMem   <>   0   then  
          begin  
              showmessage(inttostr(hmem))     ;  
              pMem   :=   GlobalLock(hMem);   {加锁全局内存块}  
              if   pMem   <>   nil   then  
              begin  
                  StrPCopy(pMem,edit1.text);   {向全局内存块写入数据}  
                  GlobalUnlock(hMem);   {解锁全局内存块}  
              end  
              else  
              MessageDlg('Couldnot   Lock   memory   block',mtWarning,[mbOK],0);  
   
          end;  
      end;      
  读出端程序:  
  var  
      hMem:   THandle;  
      pMem:   PChar;  
  hMem   :=   GetGlobalMem;   {获得全局内存块的句柄}  
  if   hMem   <>   0   then  
  begin  
  pMem   :=   pchar(GlobalLock(hMem));   {加锁全局内存块}  
  if   pMem   <>   nil   then  
  begin  
  edit3.text   :=   strpas(pMem);   {从全局内存块读取数据}  
  GlobalUnlock(hMem);   {解锁全局内存块}  
  end  
  else  
  MessageDlg('Couldnot   Lock   memory   block',mtWarning,[mbOK],0);    
  end; 问题点数:0、回复次数:1Top

1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 17:11:21 得分 0

好象你讀寫對應的全局內存其實在不同的內存空間,   一般要用共享全局內存變量來實現交換;  
   
  {获得全局内存块的句柄}   并不是對所有程序通用的,   雖然同個dll是共享內存空間的!!Top

相关问题

  • 用VB做写入注册表的DLL组件,应该怎么写呢?
  • ASP to DLL:如何将数据库登录密码写入DLL文件,再在conn.asp中读出?
  • 我在Dll写入下一个简单的程序3行,怎么总报错,帮我看看
  • 开始学习写dll组件,送第一个作品——将DataGrid中的数据写入Excel的类库。
  • 数据写入
  • 数据写入
  • 文件写入
  • ActiveReport写入Excel
  • 怎样写入BIOS?
  • 如何写入“</script>”?

关键词

  • 内存
  • dll
  • hmem
  • pmem
  • 写入
  • 全局内存块
  • gmem
  • getglobalmem
  • 內存
  • 句柄

得分解答快速导航

  • 帖主:jupiterhunter

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo