确定RasEntry结构大小使用Delphi中的RasGetEntryProperties

时间:2009-10-15 13:23:37

标签: delphi ras

我正在尝试创建一个DUN条目。

我使用lpRasEntry参数null调用RasGetEntryProperties。这应该返回lpdwEntryInfoSize参数中的结构大小。相反,它会返回错误 - ERROR_INVALID_SIZE。

如何调用RasGetEntryProperties函数来获取RasEntry结构大小?

1 个答案:

答案 0 :(得分:0)

The documentation表示当Error_Invalid_Size记录的dwSize字段不正确时RasEntry是错误。如果该函数能够读取该字段,那么您没有像您声称的那样为lpRasEntry参数提供空指针。 Microsoft文档说“null”,在Delphi中,保留字nil指定空指针。不要与名为Null函数混淆;它指定了特殊的Variant值。

根据文档,你应该有这样的代码:

var
  RasEntry: PRasEntry;
  RasBufferSize: DWord;
  Res: DWord;
begin
  RasBufferSize := 0;
  Res := RasGetEntryProperties(nil, '', nil, @RasBufferSize, nil, nil);
  if Res <> Error_Success then
    RaiseLastOSError(Res);
  RasEntry := AllocMem(RasBufferSize);
  try
    RasEntry.dwSize := SizeOf(TRasEntry);
    Assert(RasEntry.dwSize <= RasBufferSize);
    Res := RasGetEntryProperties(nil, '', RasEntry, @RasBufferSize, nil, nil);
  finally
    FreeMem(RasEntry);
  end;
end;

你问函数它需要多大的缓冲区(在RasBufferSize中),然后告诉它你希望它填充的缓冲区有多大(在RasEntry.dwSize中)。 dwSize字段告诉函数您期望接收的结构版本。