1.
对于这样的定义
buffer: array[0..255] of char;在function中使用pointer(buffer),会提示非法类型转换但若使用
zeromemory(buffer, 255)就不会, 而zeromemory的原型是ZeroMemory(destination: pointer <----!!!!!! ....)2.对于类定义 TMyClass = class
private
function abc: integer;
public
procedure foo;
end; procedure foo;
type
TP = function: integer of object;
var
p: TP;
begin
move(p, publicfoo, sizeof(tp));
//publicfoo是一全局变量, 居然可以用这样的方法把类的private部分拷贝出去
end;这应该是一种不好的做法,delphi对函数指针控制的还比较严格。没有那个of object就无法执行,想听听高手们的意见和相关心得
对于这样的定义
buffer: array[0..255] of char;在function中使用pointer(buffer),会提示非法类型转换但若使用
zeromemory(buffer, 255)就不会, 而zeromemory的原型是ZeroMemory(destination: pointer <----!!!!!! ....)2.对于类定义 TMyClass = class
private
function abc: integer;
public
procedure foo;
end; procedure foo;
type
TP = function: integer of object;
var
p: TP;
begin
move(p, publicfoo, sizeof(tp));
//publicfoo是一全局变量, 居然可以用这样的方法把类的private部分拷贝出去
end;这应该是一种不好的做法,delphi对函数指针控制的还比较严格。没有那个of object就无法执行,想听听高手们的意见和相关心得
解决方案 »
- 关于RTTI的问题请教。
- 有关数据库添加数据的问题
- Flash.OCX问题,请教高手
- 关于DBChart的问题,在线等待,急急急急急急急急急急急急急急!!!!!!!!
- 用intraweb编译出来的程序,在command窗口执行c:\applicationname.exe -install为何不能注册?
- 关于Treeview的button
- 拿起法律武器,進行還擊!!! 中国整治保安市场
- 怎么写存储过程参数才能使Ado参数输送类型为pdOutput而不为pdInputOutput
- PageContral标签在左侧时,标签中的文字自从下,怎样使其从左到右
- delphi自带的Corba的demo为什么找不到哦orbpas41.dll?
- 引用DLL后,程序退出有报错,DLL会受传入的参数类型不同而影响!为什么
- 一个资料管理程序的设想,新手,请给一个思路
p := pointer(@buffer[0]);2, 你對指針的內存區域進行拷貝,這個誰也阻止不了啊!
而且, 就是將 "这样的方法把类的private部分拷贝出去"
才能保證實例的完整啊
你能不能訪問到, 是另外一回事!
zeromemory(buffer, 255)就不会,//怎么可能?? 我这儿无法通过, D6应该添加@符号才对
procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: array [0..10] of Char;
a: Pointer;
begin
a := Pointer(@Buffer);
ZeroMemory(@Buffer, SizeOf(Buffer));
end;
没有那个of object就不是对象的方法指针,对象的方法指针当然不能和普通指针混用
TP = function: integer of object;(还隐含了self pointer)
Sizeof(TP)=8
TP = function: integer ;
Sizeof(TP)=4
>>move(p, publicfoo, sizeof(tp));
應該有問題的!不是說會出錯,
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure showit;
public
{ Public declarations }
end; pubproc = procedure;
var
Form1: TForm1;
foo: procedure;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
type
tp = procedure of object;
var
p: tp;
begin
p := showit;
move(p, foo, sizeof(pubproc));//不论是用pubproc还是tp,foo都可以正常显示
foo;
end;procedure TForm1.showit;
begin
showmessage('abc');
end;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
var i:integer;
procedure showit;
public
{ Public declarations }
end; pubproc = procedure;
var
Form1: TForm1;
foo: procedure;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
type
tp = procedure of object;
var
p: tp;
begin
p := showit;
move(p, foo, sizeof(pubproc));//不论是用pubproc还是tp,foo都可以正常显示
foo;
end;procedure TForm1.showit;
begin
i:=200;
showmessage('abc');
end;