Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NetDFSEnum - Problem mit LPBYTE (https://www.delphipraxis.net/110719-netdfsenum-problem-mit-lpbyte.html)

Alter Mann 23. Mär 2008 10:59


NetDFSEnum - Problem mit LPBYTE
 
Hallo

Ich habe ein kleines Problem mit der Übergabe des LPBYTE-Parameters innerhalb der Funktion NetDFSEnum.

Die Deklaration in der JwaLmDFS sieht so aus:
Delphi-Quellcode:
function NetDfsEnum(DfsName: LPWSTR; Level, PrefMaxLen: DWORD; var Buffer: LPBYTE; EntriesRead, ResumeHandle: LPDWORD): NET_API_STATUS; stdcall;
Nun wollte ich mal schauen, wie es geht und bekomme ich zwei Fehlermeldungen.

1. die tatsächlichen und formalen Var-Parameter müssen übereinstimmen.
2. Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden.

Delphi-Quellcode:
procedure TForm1.btnDFSClick(Sender: TObject);
var
  p, pData : DFS_INFO_3;
  ps      : DFS_STORAGE_INFO;
  er,
  hResume : LPDWORD;
  res,
  I, j    : DWORD;
  Domain  : PWideChar;
begin
  StringToWideChar(FDomainName, Domain, Length(FDomainName));
  res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, @pData, @er, @hResume); // <- 1. Meldung
  while (res = ERROR_SUCCESS) do
  begin
    p := pData;
    NetApiBufferFree(@pData);
    res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, LPBYTE(@pData), @er, @hResume); // <- 2. Meldung
  end;
end;
Hat jemand ein Tipp?

Wenn man statt
Delphi-Quellcode:
var
  p, pData : DFS_INFO_3;
ein
Delphi-Quellcode:
var
  p, pData : PDFS_INFO_3;
nimmt und es dann so Aufruft
Delphi-Quellcode:
res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, LPBYTE(pData), @er, @hResume);
klappt es auch mit dem LPBYTE-Parameter.

OldGrumpy 23. Mär 2008 12:17

Re: NetDFSEnum - Problem mit LPBYTE
 
So sollte es gehen, siehe Kommentare:

Delphi-Quellcode:
procedure TForm1.btnDFSClick(Sender: TObject);
var
  p, pData : DFS_INFO_3;
  ps      : DFS_STORAGE_INFO;
  // er und hResume sind DWORDS, übergeben wird der Funktion jeweils ein Pointer auf diese DWORDS
  //daher die Fehlermeldung
  er,
  hResume : DWORD;
  res,
  I, j    : DWORD;
  Domain  : PWideChar;
begin
  StringToWideChar(FDomainName, Domain, Length(FDomainName));
  res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, @pData, @er, @hResume);
  while (res = ERROR_SUCCESS) do
  begin
    p := pData;
    NetApiBufferFree(@pData);
    res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, @pData, @er, @hResume);
  end;
end;
Allerdings kann ich nicht sagen, was DFS_INFO_3 ist - erwartet wird ja ein Bytepointer...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz