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

发布于 2024-08-07 16:21:36 字数 198 浏览 10 评论 0原文

我正在尝试创建 DUN 条目。

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

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

I'm trying to create a DUN entry.

I am calling RasGetEntryProperties with a lpRasEntry parameter of null. This should return the structure size in the lpdwEntryInfoSize parameter. Instead it returns an error - ERROR_INVALID_SIZE.

How do I call the RasGetEntryProperties function to get the RasEntry structure size?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尤怨 2024-08-14 16:21:36

文档Error_Invalid_Size 是当 RasEntry 记录的 dwSize 字段不正确时出现错误。如果该函数能够读取该字段,则您没有像您声称的那样为 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 字段告诉函数您期望接收的结构版本。

The documentation says that Error_Invalid_Size is the error when the dwSize field fo the RasEntry record is incorrect. If the function was able to read that field, then you did not provide a null pointer for the lpRasEntry parameter as you claim you did. The Microsoft documentation says "null," and in Delphi, the reserved word nil designates the null pointer. Do not get confused with the function named Null; it designates the special Variant value.

Based on the documentation, you should have code like this:

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;

You ask the function how large a buffer it requires (in RasBufferSize), and then you tell it how large a buffer you're expecting it to fill (in RasEntry.dwSize). The dwSize field tells the function what version of the structure you're expecting to receive.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文