请问在Delphi中指针的指针该如何定义?
在一个由C语言写的DLL中定义了一个回调函数,其中一个参数为Char **buf;
由此我定义了一个如下类型type pPChar = ^PChar(如果直接定义变量为buf:^PChar,无法编译通过);然后定义如下变量buf : pPChar;
可是我在编译的时候,编译器认为 Char 等价于 pPChar,这是怎么回事?望高手解答。
问题点数:20、回复次数:13Top
1 楼fbysss(独孤求败)回复于 2004-12-02 10:37:20 得分 8
procedure TForm1.Button1Click(Sender: TObject);
var a:pointer ;
b:Pointer;
begin
a := @button1;
Showmessage(TButton(a^).Caption);
b := @a;//b为a的指针
Showmessage(TButton(Pointer(b^)^).Caption);
end;Top
2 楼cool_tang()回复于 2004-12-02 11:17:32 得分 0
谢谢你的回答,这样用我也知道,关键是我需要定义回调函数中的一个参数类型,这个类型就是指向char类型的指针的指针。Top
3 楼fbysss(独孤求败)回复于 2004-12-02 11:24:10 得分 0
type CharPt = ^Char;
type PtOfCharPt = ^CharPt;
var p : PtOfCharPt;Top
4 楼cool_tang()回复于 2004-12-02 11:44:33 得分 0
晕哦,兄弟,我就是这样做的啊,你可能没有看清楚我上面写的,但是编译器认为这样PtOfCharPt 等价于 Char。
再次谢谢。呵呵:)Top
5 楼wr960204(武稀松)回复于 2004-12-02 11:54:29 得分 5
procedure TForm1.Button1Click(Sender: TObject);
Type
PmChar=^Char;
pPmChar = ^pmChar;
var
C:Char;
Pm:PmChar;
ppm:pPmChar;
begin
C:='A';
//pPm:=c;//<--编译通不过的,谁说相等了
Pm:=@C;
PPM:=@PM;
SHowMessage(PPM^^);
end;Top
6 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-02 11:56:45 得分 7
Function (var VP : PChar ....)
就行了Top
7 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-02 12:01:11 得分 0
type
TSK = procedure (var P : PChar);stdcall;
var
P : PChar;
SK : TSK;
begin
SK := NIL;
Getmem(P,10);
FillChar(P,10,'A');
SK(P); <-跟踪到这一行,然后按Alt+C 看esp的值,就知道了,ESP保存的是P变量的地址,
FreeMem(P);
end;
以上程序不能运行,只作调试看代码用Top
8 楼cool_tang()回复于 2004-12-02 12:03:05 得分 0
这就是我的回调函数:之前定义了ppChar = ^PChar
function PdcPtlCallBackFunc(cType: Integer; dwCode: LongInt; dwDataSize: LongWord;
pData:PChar; Buf: pPChar; UserData: LongWord): Integer; cdecl;
在函数中我又定义了一个变量(t: PChar),带参数的时候把Buf带进去了(本来该带t),结果编译器报错说(不兼容的类型 PChar 与 Char).
你们说这是怎么回事嘛。难道是PChar的原因?
Top
9 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2004-12-02 12:22:25 得分 0
楼主,听我的,就用
var P : PChar
就行了!Top
10 楼fbysss(独孤求败)回复于 2004-12-02 12:23:09 得分 0
把出错信息的英文原文贴出来看看Top
11 楼cool_tang()回复于 2004-12-02 12:57:27 得分 0
[Error] CommonUnit.pas(357): Incompatible types: 'PChar' and 'Char'
[Fatal Error] EDCS7960.dpr(17): Could not compile used unit 'CommonUnit.pas'
这就是编译时报的错误信息Top
12 楼cool_tang()回复于 2004-12-02 13:03:40 得分 0
function PdcPtlCallBackFunc(cType: Integer; dwCode: LongInt; dwDataSize: LongWord;
pData:PChar; Buf: pPChar; UserData: LongWord): Integer; cdecl;
begin
...
case cType of
10: //发送数据
begin
if (GetInstance_cType(gHComm) = 1) then
begin
//以TCP方式发送
SendSocketDataA(TcpHandle, dwDataSize, Buf(本应为pData,不小心写错了), 0);
....
end
else
begin
//port_write232port(GetInstance_232Handle(pComm), datasize, pdata);
SendRS232Data(RS232Handle, buf, dwDataSize);
end;
end;
11:
...
end;
....
end;
结果编译时就发生上面那贴的错误Top
13 楼cool_tang()回复于 2004-12-03 10:25:31 得分 0
没有人讨论了吗?那我结题了,谢谢各位的回答Top




