eg
Function ReturnaPchar(res : Pchar):Boolean;
Begin
strpCopy(res,'返回给VB的字符串');
Result := True;
End; 在VB中我使用ByVal方式传值(资料上说对string要使用ByVal的方式进行传递),我的返回数据也成功返回,但是在VB应用程序关闭时(在卸载Dll的时候,出现内存错误)。请大家给点意见。
Function ReturnaPchar(res : Pchar):Boolean;
Begin
strpCopy(res,'返回给VB的字符串');
Result := True;
End; 在VB中我使用ByVal方式传值(资料上说对string要使用ByVal的方式进行传递),我的返回数据也成功返回,但是在VB应用程序关闭时(在卸载Dll的时候,出现内存错误)。请大家给点意见。
解决方案 »
- ???如何截取这样的串???
- strupper如何用?
- 如何把一个表中的一个字段更新到另外一张表的一个字段中去
- 如何在DBGrid的最左边一列显示identity列
- 关于bitbtn和dbgrid的我想用bitbtn来移动dbgrid的位置
- 安装发布时,要将*.bpl或*.dll一起打包过来?
- 请问一下:exception exception in module ckgl.exe at 000cab14.odac trial version requires delphi ide 是什么意思?
- delphi 微信接口开发
- 有关ToolBar的问题
- delphi7 读取win7 64位注册表问题
- 高分求:实现QQ收到信息任务栏下头像一闪一闪及下线后变成灰色的解决方案
- 工资管理软件,工资表如何生成.
传入参数前,要先给那个 string 参数填充一定长度的字符一般我用 strcpy 或 copymemory
Dim res as string
res = string(255,vbNullChar)我再看看,对了我是使用的stdcall调用约定
Function ReturnaPchar(res : Pchar):Boolean;stdcall;....Function ReturnaPchar(res : Pchar):Boolean;
Begin
strpCopy(res,'返回给VB的字符串');
Result := True;
End;
-------------------------------------
在VB中使用ByVal方式传数据,在传之前分配空间是不会出错的。
----------------------------------------------------
我的问题已经解决,但我不知道原因还望大侠们指点。在DLL中其他函数中使用string的返回类型如 Function a(...):string;在工程中引用了sharamem??后改为 Function a (...;res:Pchar):WordBool; 去除工程中的sharamem单元,编译,运行,通过
.
.
.
..
.
.
.
http://community.csdn.net/Expert/topic/4403/4403416.xml?temp=.2674372
如果动态库要给别的语言开发的程序调用,最好不要有string的参数,还是用pchar吧,sharamem这个单元要在dll和调用程序里面都引用,你在vb那端没有引用所以造成错误(也许是这样)。
Directive Parameter order Clean-up Passes parameters in registers?
register Left-to-right Routine Yes
pascal Left-to-right Routine No
cdecl Right-to-left Caller No
stdcall Right-to-left Routine No
safecall Right-to-left Routine No
其实由于你的参数只有一个因此参数的传递顺序不是问题,而问题出在不同的调用方式对参数传递
的堆栈管理不同,为了保证动态库的通用性,使用统一的调用约定是必要的,比如使用safecall就是
一个较好的选择.如果要让Delphi输出函数给别的工具使用,数据类型的匹配是很重要的,要掌握这
些可以参考Windos单元对API的引入,这样准没问题,前一段写了个功能包(配合硬件),使用者可以使
用VC,BCB,PB,VB等调用,经测试,只要严格遵守约定,是不会出现任何问题的.