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

[在线求教]---我照着猛料里的例子写的一个dll,freelibrary时候出错,大侠看看~解决立即给分!!

楼主coolfire729(裸泳的鱼鱼【TCY/IP】)2005-02-03 09:58:37 在 Delphi / Windows SDK/API 提问

想学着写dll插件,代码如下,最简单的一个动态调用dll例子,但是老出错,大侠看看指点一下小弟~~~  
   
  //======================================================  
  窗体运行代码如下:  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
   
      TPluginDescribe   =   procedure(var   Desc:   string);   stdcall;  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      Description:   string;  
      LibHandle:   Integer;  
      DescribeProc:   TPluginDescribe;  
  begin  
      LibHandle   :=   LoadLibrary(Pchar(ExtractFilePath(Application.ExeName)+'plugin.dll'));  
      if   LibHandle   <>   0   then  
      begin  
          DescribeProc   :=   GetProcAddress(LibHandle,'DescribePlugin');  
          if   Assigned(DescribeProc)   then  
          begin  
              DescribeProc(Description);  
              freelibrary(libHandle);  
          end;  
      end;  
   
  end;  
   
  end.  
   
   
  //=====================================================================  
  dll代码如下:  
   
  library   plugin;  
   
  uses  
      SysUtils,  
      Classes;  
   
  {$R   *.res}  
   
   
  procedure   DescribePlugin(var   Desc:   string);stdcall;  
  begin  
      Desc   :=   '1111111111111111111111111111111';  
  end;  
  exports  
      DescribePlugin;  
   
   
  begin  
   
  end.  
   
  问题点数:100、回复次数:8Top

1 楼getit911(Windows转Linux中)回复于 2005-02-03 10:02:19 得分 10

不要用string,用pcharTop

2 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:09:35 得分 0

为什么不要用string呢?  
  用pchar可以   var   传参数嘛?Top

3 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:10:59 得分 0

可是猛料里用string的啊,它这么写错了?   还是要注意其他问题呢?    
  小弟刚接触dll,大侠请明示^_^Top

4 楼Kevin_Lmx(繁华阅尽)回复于 2005-02-03 10:16:12 得分 90

用String的话,在EXE和Dll中都uses   ShareMem(放在所有引用的单元的最前面)。一般的话,不要直接使用String类型,从兼容性和安全性考虑,还是用指针PChar好。  
  PS:超级猛料也不过是从网上收集的资料,难免会有问题的……Top

5 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 10:19:44 得分 0

谢谢   Kevin_Lmx(繁华阅尽)   和     getit911(Windows转Linux中)   大侠^_^  
  pchar小弟也用的不熟,所以想偷懒用string了,呵呵,看来要多加练习哈  
   
  大家还有什么需要开发dll插件的资料或者需要注意的多贴点哈,我待会就揭帖^_^Top

6 楼Kevin_Lmx(繁华阅尽)回复于 2005-02-03 10:20:25 得分 0

参看此处:http://blog.csdn.net/agui(2004年12月15日文章)Top

7 楼coolfire729(裸泳的鱼鱼【TCY/IP】)回复于 2005-02-03 11:26:36 得分 0

揭帖,谢谢各位大侠指点^_^     !Top

8 楼warmworm(warmworm)回复于 2005-02-04 15:43:38 得分 0

动态分配string  
  使用的是延后分配方式  
   
  string   s,   t;  
  t   :=   'ttt';  
  s   :=   t;这时指向是相同的,并没有进行分配  
  s   :=   s   +   't';s重新分配  
  所以一定要改动一下sTop

相关问题

  • DLL调用正常,但在freelibrary出错。
  • DLL出错
  • dll运行出错
  • DLL应用出错!
  • dll编译出错~~
  • DLL调用出错
  • 调用.dll出错
  • dll编译出错
  • dll退出时出错?
  • dll注册时出错???

关键词

  • 代码
  • dll
  • describeproc
  • 大侠
  • libhandle
  • describeplugin
  • 小弟
  • pchar
  • 分配
  • tform

得分解答快速导航

  • 帖主:coolfire729
  • getit911
  • Kevin_Lmx

相关链接

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

广告也精彩

反馈

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