CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

■初学者请教,静态调用Dll,为什么总报错?

楼主jov(嘉林)2005-03-14 10:48:41 在 Delphi / VCL组件开发及应用 提问

Dll我是这么写的-----------------  
  {$R   *.res}  
   
  function   ABCC(aaa:string):string;stdcall;  
  begin  
          result:=aaa+'***';  
  end;  
   
  exports  
          ABCC;  
  begin  
  end.  
   
   
  调用语句我是这么写的---------------  
  implementation  
   
  {$R   *.dfm}  
   
  function   ABCC(aaa:string):string;stdcall;external   'Project1.dll';  
   
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
  begin  
          showmessage(ABCC(edit1.Text));  
  end;  
   
   
  -------------------------  
  问题是调用没有问题,但是每次弹出对话框说:  
   
  Invalid   pointer   operation. 问题点数:20、回复次数:5Top

1 楼sephil(NAILY Soft 【哈里波特大】)回复于 2005-03-14 10:57:32 得分 0

string改成PCharTop

2 楼aus(天兵)回复于 2005-03-14 10:58:03 得分 0

不要用String  
  最好用PChar之类的指针类型变量Top

3 楼pengxuan(网虫先生)回复于 2005-03-14 11:04:44 得分 0

跟String没有关系,D报什么错。Top

4 楼DDGG(叮叮当当)回复于 2005-03-14 11:50:18 得分 20

在你新建一个DLL项目的时候,项目文件里应该有这样一段话:  
   
  {   Important   note   about   DLL   memory   management:   ShareMem   must   be   the  
      first   unit   in   your   library's   USES   clause   AND   your   project's   (select  
      Project-View   Source)   USES   clause   if   your   DLL   exports   any   procedures   or  
      functions   that   pass   strings   as   parameters   or   function   results.   This  
      applies   to   all   strings   passed   to   and   from   your   DLL--even   those   that  
      are   nested   in   records   and   classes.   ShareMem   is   the   interface   unit   to  
      the   BORLNDMM.DLL   shared   memory   manager,   which   must   be   deployed   along  
      with   your   DLL.   To   avoid   using   BORLNDMM.DLL,   pass   string   information  
      using   PChar   or   ShortString   parameters.   }  
   
  就是说如果你用到string类型作为函数参数的话,就要在DLL里和调用DLL的应用程序里都引用ShareMem单元,而且要写在第一个(紧跟着uses)。  
   
  uses   ShareMem,   ...  
   
  要注意的是,在调用DLL的应用程序里引用ShareMem单元时,不是写在当前窗体的单元里,而是dpr项目文件里(选择Project->View   Source菜单)。Top

5 楼dyh506(浪)回复于 2005-03-14 11:55:24 得分 0

string是delphi里面特有的数据类型,做dll时要使用就如楼上所说的要用sharemem单元,不然就用pchar  
  或字符数据Top

相关问题

  • dll调用总是报错
  • 关于调用静态dll
  • 一DLL,VB调用是报错:"bad dll caling convention",为什么?
  • 静态调用dll的一个问题
  • 关于静态调用 dll 的问题
  • 调用WEBSERVICE报错!!!!!!!!
  • dll中创建adoconnetion,报错'尚未调用CoInitialize',为什么啊
  • ■初学者请教,动态调用Dll,为什么总报错?
  • dll中静态调用和动态调用的区别
  • 将vc6由动态调用DLL该为静态调用?

关键词

  • 项目
  • dll
  • 调用
  • sharemem
  • abcc
  • 单元
  • aaa
  • project
  • function

得分解答快速导航

  • 帖主:jov
  • DDGG

相关链接

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

广告也精彩

反馈

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