3

Pascal 中声明指向指针的变量的目的是什么?我在 Mac Think Pascal 中有一个代码。以下是我不理解的代码中的一些部分:

type
   my_array = array[1..100] of integer;   
   my_array_pointer = ^my_array;
   my_array_handle = ^my_array_pointer;
   ...
var 
   xx : my_array_handle; 
   ...
begin
   xx:= my_array_handle(NewHandle( sizeof(my_array)) );

如您所见,最后一行是将类型分配my_array_handle给 variable xx。这是什么意思?NewHandle 函数有什么作用?(这是 的内部函数Think Pascal)。实际上,我需要将Think Pascal程序转换为Windows Pascal. 但是我找不到NewHandle函数的描述,也不知道如何使用标准(等)指针函数来实现这个New()函数GetMem()

4

1 回答 1

3

这是一个经典的 macos 功能,而不是典型的 Pascal 功能。

我不确切知道,但它与加载程序在非 PM 环境中的可重定位性有关。

请注意,间接指针是通过 OS 函数分配的,这可能意味着它是在 OS 维护的某个表中分配的。(以便操作系统可以移动/重新定位程序?)

在现代 Mac(和其他)编程中,这整个原则是陌生的。把它清理干净。

(补充) 如果你想保留这些重定向,你可以试试你的运气,比如:

     function newhandle( nrbytes:integer):ppointer;
     var xx : ppointer;
     begin
        new(xx);
        getmem(xx^,nrbytes);
        newhandle:=xx;
     end;

我最初没有添加它,但我建议您简单地清理这些过时的间接引用并直接使用基于 my_array_pointer 的指针和 getmem 或 new。

这些间接引用的含义在非 m68k Classic Mac OS 系统上没有用,尽管 afaik 以后的 PPC 版本仍然在一定程度上支持它们。(PPC 始终处于保护模式)

如果你真的想要详细的细节,你可能想订阅 mac-pascal 列表。

于 2013-05-03T06:50:57.777 回答