Delphi作的.dll用于处理字符(String)数据给VB, VB调用此.dll时出错, 怎么解决?
Delphi处理了上MB的字符数据然后用PChar返回给VB, VB就支持不了,
数据小于1MB可以, 但是大了VB就不行了, 所以我用delphi分配了块空间, 然后返回PChar, 这样VB就可以了,但是问题在于内存释放非常慢, 有时还不释放了, 功能执行很慢. 代码如下:
.dll :
var
Src : PChar;
Len: Cardinal;
begin
Src := xxx();//产生大量字符;
GetMem(Result, Len);
Move(Src^, Result^, Len);
end;vb :
调用.dll的函数是静态的, 并使用了ByVal是否要我释放掉Result的那块内存, VB的.dll是否是VB程序结束了才释放
Delphi处理了上MB的字符数据然后用PChar返回给VB, VB就支持不了,
数据小于1MB可以, 但是大了VB就不行了, 所以我用delphi分配了块空间, 然后返回PChar, 这样VB就可以了,但是问题在于内存释放非常慢, 有时还不释放了, 功能执行很慢. 代码如下:
.dll :
var
Src : PChar;
Len: Cardinal;
begin
Src := xxx();//产生大量字符;
GetMem(Result, Len);
Move(Src^, Result^, Len);
end;vb :
调用.dll的函数是静态的, 并使用了ByVal是否要我释放掉Result的那块内存, VB的.dll是否是VB程序结束了才释放
解决方案 »
- 如何得到视频采集卡上的视频信息!
- 谁帮我Overrdie 一下 TSpeedButton的方法?我不喜欢bsup状态.
- 初学者数据库统计的问题!
- 请问怎样在delphi7中添加QuickReport报表控件?
- 如何判断在TStringGrid中某中Cells中输入的值是否是Float型?
- DBGrid如何选择、增加、删除一行?
- 怎么样怎么样把a.aiv,b.avi这几个文件合并到一个AA.dat文件中
- 给您推荐我写的最好的推箱子游戏,有源码!
- 判断Image上图片的格式 一个奇怪的问题
- 最近比较忙,说声对不起
- delphi for net 如何制作报表?
- 設置整個 程序的輸入法,請各位大俠幫幫偶,散分了。
1楼问的是VB端?
VB声明:
Private Declare Function xxx Lib "mydll.dll" (ByVal str As String) As StringDelphi声明:
Function xxx(str : PChar):PChar;stdcall;export;.dll是Delphi写的, VB传一个地址给Delphi的dll, 此dll处理完数据后返回给VB, VB要接收那些数据. 数据少可以,多了就有问题,所以我用delphi的dll去创建了块空间, 这样VB就可以使用大量数据了,但是问题在于内存释放非常慢, 有时还不释放了, 功能执行很慢. 就是问怎么解决,是要我去释放空间? 因为我不清楚VB调用.DLL后是怎样释放的.
你在Delphi代码里申请的内存空间,让VB代码去释放,不好。
数据量大了VB的栈就暴了, 所以建议你使用一个全局的变量先记录那块空间, 等VB使用完了再由VB主动调用.dll提供的新方法释放掉就可以了