加载中…
个人资料
阿剑
阿剑
  • 博客等级:
  • 博客积分:0
  • 博客访问:47,533
  • 关注人气:8
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Delphi调用Dll出现错误:EInvalid pointer 的解决方法

(2012-05-24 15:24:26)
标签:

dll

delphi

it

分类: 编程资料

出现此问题,一般是传递了一字符串或动态数组给dll引起的。

Delphi的联机帮助解释如下:

  On Windows, if a DLL exports routines that pass long strings or dynamic arrays as parameters or function results (whether directly or nested in records or objects), then the DLL and its client applications (or DLLs) must all use the ShareMem unit. The same is true if one application or DLL allocates memory with New or GetMem which is deallocated by a call to Dispose or FreeMem in another module. ShareMem should always be the first unit listed in any program or library uses clause where it occurs.

ShareMem is the interface unit for the BORLANDMM.DLL memory manager, which allows modules to share dynamically allocated memory. BORLANDMM.DLL must be deployed with applications and DLLs that use ShareMem. When an application or DLL uses ShareMem, its memory manager is replaced by the memory manager in BORLANDMM.DLL.

Note

Linux uses glibc's malloc to manage shared memory.

 

windows下,uses ShareMem即可解决此问题,加的位置必须注意,否则会出错!调用dll的主程序,加在工程主文件的uses的第一句,必须是第一句,Dll也是一样,类似:

program project1;

uses
  ShareMem

  Forms,

  ........................

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有