Hmm... das ist lustig, ich habe natürlich nicht bei dem Autor geguckt, weil ich davon ausging, dass die Datei bei den
Jedi die neueste ist. Wie du korrekt bemerkst, ist sie das nicht, denn sie ist vom 25. November 2002.
Aber mit der alten Version funktioniert das ganze 1a. Vielleicht ist da was verschlimmbessert worden?
Ne, ich hab' mir die von dir genannte Version gezogen und die Deklaration von NetShareEnum ist auf den ersten Blick identisch mit der in meiner alten Version, also anders als die, die du am Thread-Anfang genannt hast. Ich habe also die neue Version in mein Lib-Verzeichnis extrahiert und - ÜBERRASCHUNG - es funktioniert immer noch. Unter Delphi 7 Personal.
Folgender Code funktioniert mit der von dir genannten Version der Header unter Delphi 7 Personal:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JwaLM, JwaLmShare;
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TShareInfo502Array =
Array of SHARE_INFO_502;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var shareBuffer: TShareInfo502Array; dwRead, dwEntries: Cardinal; i: Integer;
begin
NetShareEnum(
nil, 502, PByte(shareBuffer), MAX_PREFERRED_LENGTH, @dwRead, @dwEntries,
nil);
for i := 0
to dwRead - 1
do begin
ShowMessage(WideCharToString(shareBuffer[i].shi502_netname));
end;
end;
end.
Mir ist dabei noch eine Kleinigkeit aufgefallen, die dich eventuell verwirrt: Bei den Freigaben sind auch immer alle Laufwerke mit einem Dollarzeichen dabei (also C$, D$, E$ usw.), zusätzlich zu den normalen Freigabe-Ordnern. Andererseits hast du nicht von einem Buchstaben plus Dollarzeichen geschrieben...
Fakt ist jedenfalls, der von mir gepostete Code funktioniert, und wenn er bei dir nicht funktioniert, dann muss wohl irgendwas an deinem Delphi korrupt sein...