在一个由C语言写的DLL中定义了一个回调函数,其中一个参数为Char **buf;
由此我定义了一个如下类型type pPChar = ^PChar(如果直接定义变量为buf:^PChar,无法编译通过);然后定义如下变量buf : pPChar;可是我在编译的时候,编译器认为 Char 等价于 pPChar,这是怎么回事?望高手解答。
由此我定义了一个如下类型type pPChar = ^PChar(如果直接定义变量为buf:^PChar,无法编译通过);然后定义如下变量buf : pPChar;可是我在编译的时候,编译器认为 Char 等价于 pPChar,这是怎么回事?望高手解答。
解决方案 »
- tcoolbar的edgeborders的属性用来干嘛的?
- 谢谢高手指点!初学者
- 如何得到datetime类型的年月日 时分秒的值
- 設置adotable的filter屬性和直接用ado查詢組件中寫sql語句,到底誰快?
- 通过调用DLL完成对表的查询并返回字符列表行不通吗?为什么出错?
- 为什么打印机不打报表,而是空走纸呀
- 怎么样带参数运行可执行程序
- 出现cannot perform this operation on a closed dataset这个问题该怎么办??
- TStringList...
- 我的痛苦谁人知?
- 我做了个程序分为mdiform和childform,我怎么能控制同一个childform在mdiform多次打开?在什么地方写??
- 為什麼招聘信息上很多非軟件公司卻在招收程序員?
var a:pointer ;
b:Pointer;
begin
a := @button1;
Showmessage(TButton(a^).Caption);
b := @a;//b为a的指针
Showmessage(TButton(Pointer(b^)^).Caption);
end;
type PtOfCharPt = ^CharPt;
var p : PtOfCharPt;
再次谢谢。呵呵:)
Type
PmChar=^Char;
pPmChar = ^pmChar;
var
C:Char;
Pm:PmChar;
ppm:pPmChar;
begin
C:='A';
//pPm:=c;//<--编译通不过的,谁说相等了
Pm:=@C;
PPM:=@PM;
SHowMessage(PPM^^);
end;
就行了
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;
以上程序不能运行,只作调试看代码用
function PdcPtlCallBackFunc(cType: Integer; dwCode: LongInt; dwDataSize: LongWord;
pData:PChar; Buf: pPChar; UserData: LongWord): Integer; cdecl;在函数中我又定义了一个变量(t: PChar),带参数的时候把Buf带进去了(本来该带t),结果编译器报错说(不兼容的类型 PChar 与 Char).你们说这是怎么回事嘛。难道是PChar的原因?
var P : PChar
就行了!
[Fatal Error] EDCS7960.dpr(17): Could not compile used unit 'CommonUnit.pas'
这就是编译时报的错误信息
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;结果编译时就发生上面那贴的错误