在编写函数返回PCHAR类型时,分配缓冲在哪里写的问题。 在线等 正在学习DLL的里面过程与函数的编写,在写过程时若一个变参是PCHAR类型,在调用程序里预先分配一个PCHAR类型的变量,在调用带参数PCHAR类型的过程就可以了;但在写返回一个PCHAR类型的函数时,那么空间分配像不该在调用前分配,但在被调用函数里分配吗,暂还搞不清楚。 希望能够把一个返回PCHAR类型的函数的DLL源码贴出来,使我有个简单的了解。希望该函数越简单越好,能够说明问题就是。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主看来学东西挺认真,这确实需要留意的细节。。一般不主张这样返回的,观察WINDOWS API等可以注意到,当要被调用方返回字符串时候,往往是调用方分配空间。。调用方分配空间,可以在栈中,也可以在堆中。。要由被调用方分配内存,则只能在堆中,也就是说只能用分配函数动态分配。而且,这种情况下,调用方用完后有责任来释放这块内存。 有没有一个实例,光说还是不知如何使用。或许我问法有问题,现在问题就是在哪里分配空间的问题。或有实例,可以发俺的邮箱 khkhingat163.com(@ 写成 at) 对于反馈值是指针类型(pchar),在函数内创建了一变量pResult作为反馈时使用,在执行了反馈语句以后,然后释放掉pResult变量,调用函数反馈的值变得不确定(每次都不相同),若把释放语句注解掉,反馈结果却正常了。哪么到底应该如何写代码了?若函数执行完以后,不释放指针变量可以吗,该部分占用的资源会释放掉吗?反馈结果不确定的语句: Result:=pResult;//反馈内容 StrDispose(pResult);//释放缓冲反馈结果正常的语句: Result:=pResult;//反馈内容 //StrDispose(pResult);//释放缓冲 一般要返回字串时,我是这样写的(C++的方式).getString(p:Pchar;nSize:integer);调用的时候先分配var buf:array [0..255] of byte;getString(buf,256); 是的 一般不建議直接返回PChar 這樣的指針類型 這樣不夠安全一般是采取C風格的 調用方傳入緩沖/指針,dll在裡面進行修改bool Test(char* buf, int nLen)orfunction Test(buf: PChar; nLen:Integer): Boolean; 但俺暂只在DELPHI里使用,请举DELPHI的例子好吗。 delphi中DBGrid显示问题。在界面中显示不了。 请教一个用delphi如何实现刷卡的问题? Delphi中不同操作系统中,简繁体转换 frxReport的打印预览如何使用?? spcomm在哪裡 ado连接数据库 菜鸟问题,帮忙回答!! 熟悉TNMPOP3构件的,请进…… DELPHI 如何用图片重绘 scrollBar 关于变量比较(希望各位高手赐教!) 如何使用ShellExecute打开IE窗体,要求是在新窗体中打开,非原来IE窗体。顶者有分! 请帮我看一下这个指向记录数组的指针用法是否正确
一般不主张这样返回的,观察WINDOWS API等可以注意到,当要被调用方返回字符串时候,往往是调用方分配空间。。
调用方分配空间,可以在栈中,也可以在堆中。。要由被调用方分配内存,则只能在堆中,也就是说只能用分配函数动态分配。
而且,这种情况下,调用方用完后有责任来释放这块内存。
Result:=pResult;//反馈内容
StrDispose(pResult);//释放缓冲反馈结果正常的语句:
Result:=pResult;//反馈内容
//StrDispose(pResult);//释放缓冲
getString(p:Pchar;nSize:integer);
调用的时候先分配
var
buf:array [0..255] of byte;getString(buf,256);
一般是采取C風格的 調用方傳入緩沖/指針,dll在裡面進行修改bool Test(char* buf, int nLen)
or
function Test(buf: PChar; nLen:Integer): Boolean;