AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

NetDFSEnum - Problem mit LPBYTE

Ein Thema von Alter Mann · begonnen am 23. Mär 2008 · letzter Beitrag vom 23. Mär 2008
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

NetDFSEnum - Problem mit LPBYTE

  Alt 23. Mär 2008, 10:59
Hallo

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

Die Deklaration in der JwaLmDFS sieht so aus:
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
res := NetDFSEnum(Domain, 3, MAX_PREFERRED_LENGTH, LPBYTE(pData), @er, @hResume); klappt es auch mit dem LPBYTE-Parameter.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#2

Re: NetDFSEnum - Problem mit LPBYTE

  Alt 23. Mär 2008, 12:17
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...
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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