助人为快乐之本,更何况Money多多!

ZLLDJH 2000-05-22 05:42:00
本人在DLL的编写过程中遇到如下问题:
1:STRING类型在VC,VB中有无对应类型,(不考虑PCHAR)
2:在DELPHI中,函数入口参数可以有缺省值,但PCHAR不行,是否因为是指针类型,在参数类型不变的情况下,有无解决方法!
...全文
228 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wai_lf 2000-06-29
  • 打赏
  • 举报
回复
关注.
darkstar 2000-06-11
  • 打赏
  • 举报
回复
第二个问题我赞同Lin的看法
第一个问题
在标准的Pascal中,string类型式如此定义,
var
aString :string;
aString[0]是字符串的长度,字符串以'$'字符结尾
但是Delphi中好像做了改动,我在delphi中定义了一个字符串变量,然后跟踪内存地址,发现这个字符串是以NULL结尾。
kxy 2000-06-11
  • 打赏
  • 举报
回复
1:STRING类型在VC,VB中有无对应类型,(不考虑PCHAR)
为什么不考虑PChar??delphi中dll使用string,help中写的很清楚.
delphi中的string使用引用计数和copy-on-write所以做到dll中比较麻烦.
江王 2000-05-24
  • 打赏
  • 举报
回复
PChar不能有字符串缺省值是肯定的,不过这完全可以通过其它方法来解决,如增加一个整型的参数就可以很容易解决问题。Windows API中基本上每一个PChar参数后面都跟着一个count参数。
Jean 2000-05-23
  • 打赏
  • 举报
回复
2: 参数有缺省值的条件是,其类型须是可计数(Cardinal)类型,
包括Boolean,Byte,Smallint,Integer,Word等和枚举类型。
ljv_23 2000-05-23
  • 打赏
  • 举报
回复
关于第一个问题,在VC中可使用CString类,VB中有String数据类型。
关于第二个问题由于不熟悉Delphi,无法回答。
码狂 2000-05-23
  • 打赏
  • 举报
回复
虽然我对VC,VB不太了解,但有一点是肯定的,Borland并没有公布String类型的具体实现。
因此在DLL中只能用PChar做为参数。

可以,将其指向空。(nil)
halfdream 2000-05-23
  • 打赏
  • 举报
回复
1. DELPHI中的String(即BCB中的AnsiString) 在vc和vb没有对应结构。
VC 中的CString 和 VB 中的String 也是两码事。
在COM中较多使用的BSTR用于参数传递。BSTR即Basic String 是为了照顾VB。
Delphi和BCB 可以使用WideString 来实现BSTR。
2,PChar 作参数时可以有缺省值,如Lin 所说。
Lin 2000-05-23
  • 打赏
  • 举报
回复
1、用Delphi编写DLL,如果VB、VC++等想调用,必须使用PChar类型。String是一个挺有意思的类型,引进它主要是为了解决内存泄露的问题,有点类似VC++中的CString类型。给你两个API希望对你有所帮助:
function GetStrAllocSize(const S: string): Longint;
var
P: ^Longint;
begin
P := Pointer(S);
Dec(P, 3);
Result := P^ and not $80000000 shr 1;
end;

function GetStrRefCount(const S: string): Longint;
var
P: ^Longint;
begin
P := Pointer(S);
Dec(P, 2);
Result := P^;
end;

2、Jean说得不对,肯定是可以的,例如声明:
procedure DeleteMe(const id: Integer; PBuff: PChar = nil);
用DeleteMe(0)和DeleteMe(0, APointer)都可以调用。

5,386

社区成员

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

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