AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit NetShareEnum

Ein Thema von CalganX · begonnen am 25. Sep 2004 · letzter Beitrag vom 25. Sep 2004
Antwort Antwort
Seite 2 von 2     12   
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 19:21
Hi,
wenn ich das so mache, wie du das vorschlägst, also ungefähr so
lviNewItem.Caption := WideCharToString(@aWorkBuffer.shi502_netname); funktioniert das auch nicht. Dann habe ich da nur noch ein paar Fragezeichen und ein paar Blöcke...

Chris
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#12

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 19:31
Ich wage jetzt einmal zu behaupten, dass das @ nicht sein muss, weil ein LMSTR (was der offensichtliche Typ des Strings ist) ein LPWSTR ist, was einem PWideChar entspricht, und somit schon ein Zeiger ist. Probier' das auch nochmal, wenn das nicht funktioniert, weiß ich's auch nicht ;c)
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 19:33
Hi,
Delphi-Compiler
[Fehler] MainUnit.pas(50): Inkompatible Typen: 'Char' und 'WideChar'

Ohne Worte.

Chris
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#14

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 20:33
Bei mir ist LMSTR ein PWideChar
Daher macht "Inkompatible Typen: 'Char' und 'WideChar'" doch überhaupt keinen Sinn...



Übrigens:
Delphi-Quellcode:
TShareInfo502Array = Array of SHARE_INFO_502;
[...]
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;
liest alles perfekt aus...

Du hast scheinbar eine ältere Version der Header, denn in meiner (die ich eben gerade heruntergeladen habe) sind die beiden DWORDS-Parameter nicht mehr var, sondern PDWORD...

Es funktioniert auch, wenn ich die Namen so ausgebe:
  ShowMessage(WideCharToString(shareBuffer[i].shi502_netname));
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 20:57
Hi,
wenn ich den Code von dir 1-zu-1 übernehme bekomme ich immer noch den Fehler mit den formalen Parametern und soweiter. Allerdings dreimal: zwei Mal zusätzlich bei @dwRead bzw. @dwEntries.
Wenn ich den so anpasse, dass er diese Fehler nicht mehr angibt sieht das ganze so aus:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var
  shareBuffer: PSHARE_INFO_502;
  s2: TShareInfo502Array;
  dwRead, dwEntries: Cardinal;
  i: Integer;
begin
  NetShareEnum(nil, 502, Pointer(shareBuffer), DWORD(-1), dwRead, dwEntries, nil);
  s2 := TShareInfo502Array(shareBuffer);
  for i := 0 to dwRead - 1 do begin
    ShowMessage(s2[i].shi502_netname);
  end;
end;
Und es werden wieder nur der erste Buchstabe angezeigt.

Chris

PS: Nur um Missverständnisse vorzubeugen: ich habe die JwaLM auskommentiert und dafür deine Deklaration genommen.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#16

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 21:14
Wie ich schon sagte, ich habe mir die aktuellen Jedi-Header geladen und die fordern ein @dwRead etc. Du solltest vielleicht auch mal die neue Version runterladen!?
Dort funktioniert auch nicht mehr die Konvertierung nach Pointer, es muss nach PByte konvertiert werden.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 21:42
Hi,
ich kapiere langsam gar nichts mehr.
Also: ich habe mir gerade von der Website des Autors (http://members.chello.nl/m.vanbrakel2/) die aktuellen Übersetzungen heruntergeladen. Das ist die Version vom Mai 2004.
Alle alten Dateien gelöscht, überall nach Überresten gesucht und dann die Dateien in das Verzeichnis entpackt und dann versucht das ganze zu kompilieren. Es geht immer noch nicht. Bei deinem Code kommen die Fehler, wie bisher und bei dem veränderten wieder nur die ersten Buchstaben.

Es bleibt also bei folgendem Source, der nicht richtig funktioniert:
Delphi-Quellcode:
type
  PSHARE_INFO_502 = ^_SHARE_INFO_502;
  TShareInfo502Array = Array of _SHARE_INFO_502;

procedure ListNetShares(const sServer: PAnsiChar);
var
  aShareBuffer: PSHARE_INFO_502;
  aWorkBuffer: TShareInfo502Array;
  dwEntriesRead: Cardinal;
  i: integer;
  lviNewItem: TListItem;
begin
  NetShareEnum(sServer, 502, PByte(aShareBuffer), MAX_PREFERRED_LENGTH,
    dwEntriesRead, dwEntriesRead, nil);
  aWorkBuffer := TShareInfo502Array(aShareBuffer);
  for i:=0 to dwEntriesRead - 1 do begin
    lviNewItem := frmMain.lvShares.Items.Add;
    lviNewItem.Caption := aWorkBuffer[i].shi502_netname;
  end;
end;
Chris
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#18

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 21:59
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...
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 22:29
Hi,
es war noch viel einfacher, als ich dachte. Als ich gerade deinen Source 1-zu-1 kopieren wollte, um ihn zu testen ist mir aufgefallen, dass du die JwaLMShare verwendest. Ich habe sie einfach mal eingebunden und seit dem funktioniert. Das komische ist, dass die Deklaration in der JwaLM eine etwas andere ist, als in der JwaLMShare zumindest macht diese Unit den Unterschied aus.

Ist mir zwar ein kleines Rätsel, aber unser Dialog ist ja zu einem glücklichen Ende gekommen.

Vielen Dank,
Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:42 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