(Think)Pascal中指向指针和NewHandle函数的指针

时间:2013-05-03 05:24:38

标签: pointers pascal handle

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类型到变量xx的分配。这是什么意思? NewHandle功能有什么作用? (这是Think Pascal)的内部函数。实际上,我需要将Think Pascal程序转换为Windows Pascal。但是我找不到NewHandle函数的描述,也不知道如何使用标准(New()GetMem()等)指针函数来实现这个函数。

1 个答案:

答案 0 :(得分: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系统上没有用,虽然后来的PPC版本仍然有点支持它们。 (PPC始终是保护模式)

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