0

为什么这不起作用?

with Win32.Winbase; use Win32.Winbase;
with Win32; use type Win32.BOOL;
with Win32.Winnt; use type Win32.Winnt.pHandle;

procedure Welcome is

   Startup_Info      : aliased STARTUPINFO;
   SecurityAttribute : aliased PSECURITY_ATTRIBUTES;

begin

   Startup_Info.dwFlags       := 123;  -- OK

   SecurityAttributes.nLength := 123;  -- ERROR 

end Welcome;
4

1 回答 1

1

因为 PSECURITY_ATTRIBUTES 是一种访问(指针)类型,并且您尚未分配它的实例:

type PSECURITY_ATTRIBUTES is access all SECURITY_ATTRIBUTES;

所以你必须先分配它的一个实例:

SecurityAttributes  : PSECURITY_ATTRIBUTES := new SECURITY_ATTRIBUTES;

(因为它是指针类型,所以不需要“别名”。)

现在您可以分配给它:

SecurityAttributes.nLength  :=   123;

或者,如果 SecurityAttributes 被声明为 SECURITY_ATTRIBUTES 类型的别名,那么您的原始分配将起作用。顾名思义,我强烈怀疑前面的“P”是为了表示该类型是指针类型。

这还没有编译,我是通过在线源代码清单来的。

于 2013-11-03T15:54:04.290 回答