不要用string改用Pchar,就可以了!
解决方案 »
- 菜单和树的动作如何关联?
- COM自定义事件问题请教
- 大家好:需求分析!~~~~
- 请问QReport的一些关于属性和类型的基本问题(报表高手进,想学报表的来听课!):
- 报错:因为配置类型不正确,系统无法开始服务器进程,请检查用户名与密码!
- 悼念伟大艺人——张国荣!
- tabel控件中的文字如何换行显示,例如显示成两行
- 请问哪位高手了解‘EXCEL SDK'
- 我用存储过程把数据调到本机,在dbgrid中显示出来了,但我该如何在本机把dbgrid中的数据排序呢,而不是要通过SQL命令去服务器拿资料
- 电脑组装
- 高手快来看看啊。很急很难的问题啊。。 送高分啊!!
- 很急的问题,我的2000任何驱动都安装不上,安装到最后,都说缺少需要的文件,怎么办
根据我的经验,VB调用DELPHI,应使用STRING。说到底,STRING也是一个32位的指针,最后有NULL结尾。
其次,我的程序必须要用STRING。原因如下:
var
s :array[1..0] of char;
p:pchar;
ss:string;
....
这三种类型间的正确赋值方法如下:
p:=@s;
ss:=s;
从上述语句可知,s的地址付给了PCHAR的变量。如果退出DLL,S的内存即被释放,如果再去操作P,非发生错误不可。(实际上,上述程序我已经实验过)而ss:=s的操作,是给ss分配一块内存,将s的内容复制到ss。
由于我的程序里用了array[x..n]of char的类型,用PCHAR显然是不合适的。
thirdapple:您可能未能理解我的意思,我是要把VB的参数传到DLL中,由DLL改写后传回来,所以不能用BYVAL。
事实证明,我原先的推测是正确的。
为了让大家一起提高,把我的方法介绍一下:
VB声明STRING变量后,必须分配空间;DLL中,必须用STRCOPY方法将值复制到该参数,而不能直接赋值。至于我提到的array [x..n] of char,只有当起始下标是0的时候,才能与PCHAR兼容(事实上,这才是困扰我时间最长的问题)