Tôi đã kiểm tra Delphi tạo ra các tập tin bản đồ và tôi tìm thấy một điều kỳ lạ ở đó. Định danh được phân cách bằng dấu chấm kép thay vì một dấu chấm.Dấu chấm kép .. trong Delphi Bản đồ tập tin
Ví dụ MapFile..TFoo
lấy từ ví dụ đơn giản
program MapFile;
{$APPTYPE CONSOLE}
{$R *.res}
type
TFoo = class(TObject)
public
function GetFoo: string;
end;
function TFoo.GetFoo: string;
begin
Result := 'foo';
end;
var
foo: TFoo;
begin
foo := TFoo.Create;
writeln(foo.GetFoo);
foo.Free;
end.
và công chúng bản đồ tập tin của nó
Address Publics by Name
0001:00005AC8 MapFile..TFoo
0001:00005BBC MapFile.Finalization
0004:00002BA0 MapFile.foo
0002:000000BC MapFile.MapFile
0001:00005B88 MapFile.TFoo.GetFoo
0001:000059D0 SysInit...
0001:000059C0 SysInit...
0001:00005AA8 SysInit...
0001:000059B0 SysInit...
0001:00005A98 SysInit...
0001:00005A74 SysInit...
0003:000007D8 SysInit...
0001:000059A0 SysInit...
0001:000059E0 SysInit...
0001:000059F0 SysInit...
0001:00005A04 SysInit...
0001:00005A34 SysInit...
0001:00005A4C SysInit...
0004:00002B98 SysInit..1
đoán tốt nhất của tôi là MapFile..TFoo
là một lớp học, nhưng tại sao chấm đôi? Và những gì sau đó là SysInit..1
Theo như tôi biết Delphi không có các lớp học vô danh.
Vâng, Delphi có các lớp ẩn danh - chúng thực hiện các chức năng/thủ tục ẩn danh. Nhưng ở đây chính xác tôi đoán sẽ là VMT của TFoo. Một cái gì đó như http://i.stack.imgur.com/0kLZ0.png và http://i.stack.imgur.com/eFpD3.png –
@ Arioch'The, những ảnh đó hiển thị tệp '.map' cho C++ , các quy ước được sử dụng là khác nhau. – Johan
@Johan các hình ảnh không hiển thị .MAP - như bạn có thể thấy trong các hình ảnh mình. Chúng hiển thị .BPL. Và trong khi tôi không biết trình biên dịch EMBT nào sử dụng bên trong ngôi nhà để biên dịch các bản phát hành BPL - tôi nghĩ họ sử dụng DCC32 –