关于PChar长度太短的问题

EastonSoft 2011-07-04 10:47:10
我现在需要写一个 函数,然后将函数封装到DLL里面,在Form里面我的字符串是使用string,但是DLL里面我使用PChar后就会出现错误。后来我发现是PChar的长度不够。

函数如下:
function fun(Html:PChar):PChar;stdcall;

我在delphi里面另外做一个窗体项目,然后调用这个DLL里面的fun函数就会出现错误。我需要处理比较长的字符串,所以我现在不知道该怎么办。我的函数是用来处理HTML页面的,我需要将HTML代码传入函数。

错误代码Access violation at address 0040404B in module 'Project1.exe'. Read of address 01D39358.
...全文
459 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenfeng1016 2013-06-27
  • 打赏
  • 举报
回复
或是取到的值是空值
shenfeng1016 2013-06-27
  • 打赏
  • 举报
回复
楼主有解决吗,我也遇到这样的问题,我是.net 调用delphi的动态库,pchar赋值长度过长就会报错
伊吹萃香 2011-07-23
  • 打赏
  • 举报
回复
因为string的内存管理不大一样。
lwm08106542000 2011-07-23
  • 打赏
  • 举报
回复
... 无语了,加QQ群 32143041
EastonSoft 2011-07-23
  • 打赏
  • 举报
回复
function DllFun(a,b,c:Pchar):Pchar;stdcall;
var
_a, _b, _c: string;
begin
_a:= string(a);
_b:= string(b);
_c:= string(c);

....

我的DLL里面是这样写的。如果把Pchar换成string可以,但是关闭程序的时候会出错,我写的DLL要通用的,C/C++也要可以用。所以我必须使用Pchar。
ADSLAN 2011-07-05
  • 打赏
  • 举报
回复
肯定是没有分配内存吧 Pchar不能直接用
「已注销」 2011-07-05
  • 打赏
  • 举报
回复
我以前用PCHAR也报错了,后来分配了一下内存就好了
Response:PChar;
GetMem(response,4200) ;
FreeMem(Response);
这样就没问题
纯冰糖 2011-07-05
  • 打赏
  • 举报
回复
把那个函数取出来,在主程序里调试一下。
五哥 2011-07-05
  • 打赏
  • 举报
回复
pChar怎么会不够,pChar是字符指针,只是给过去一个地址,函数中会自动去读那个地址开始的数据;

把Form里面定义的String 也定义成pChar试试 ;

你这个错误是访问无效内存地址啦,你跟踪调试一下,看看运行到什么地方报的错 。
纯冰糖 2011-07-05
  • 打赏
  • 举报
回复
var
p:array[0..1023]of char;
...
ZeroMemory(@P,1024);

再试试
yqdragon 2011-07-04
  • 打赏
  • 举报
回复
PChar的长度不够?
不会吧,你要处理多长

先把DLL中的函数移到主Form中看有无问题,是不是其它错误问题造成的

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧