Moin Salomon,
Du hast Dich durchgängig an die Deklarationen für 9x/ME gehalten, zum einen was das Einbinden der Funktion, zum anderen, was die verwendete Struktur angeht.
Für XP musst Du aber die NT/2000/XP Versionen verwenden.
Delphi-Quellcode:
const
NERR_Success = 0;
MAX_PREFERRED_LENGTH = DWORD(-1);
type
NET_API_STATUS = type DWORD;
PSHARE_INFO_0 = ^SHARE_INFO_0;
SHARE_INFO_0 =
packed record
shi0_netname : PWChar;
end;
function NetApiBufferFree(
const Buffer : Pointer
) : NET_API_STATUS; stdcall; external 'netapi32.dll';
function NetShareEnum(
const servername : PWChar;
const level : DWord;
const bufptr : Pointer;
const prefmaxlen : DWord;
const entriesread : PDWord;
const totalentries : PDWord;
const resume_handle : PDWord
) : NET_API_STATUS; stdcall; external 'netapi32.dll';
var
si0Work : PSHARE_INFO_0;
si0Save : PSHARE_INFO_0;
dwEntriesRead : DWORD;
dwTotalEntries : DWORD;
i : DWORD;
begin
if NetShareEnum(nil,0,@si0Work,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil) <> Nerr_Success then exit;
try
si0Save := si0Work;
for i := 1 to dwEntriesRead do
begin
ComboBox1.Items.Add(si0Save.shi0_netname);
inc(si0Save);
end;
finally
NetApiBufferFree(si0Work);
end;
end;
Wichtig hierbei:
Ich verwende für die Funktionsdeklarationen immer die C-typische Variante, während die Jedis, meines Wissens, immer die Borland typische Variante nehmen (var Parameter)