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 1 von 2  1 2      
CalganX

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

Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:16
Hi,
ich versuche gerade irgendwie alle Freigaben aufzulisten, aber trotzdem macht mir die WinAPI da einen Strich durch die Rechnung. Mit Hilfe der JEDI-Überestzung der lm.h rufe ich su NetShareEnum auf:
Delphi-Quellcode:
NetShareEnum(@sServer[1], 502, @aShareBuffer, MAX_PREFERRED_LENGTH,
          dwEntriesRead, dwEntriesRead, nil);
Dazu folgenden Variablen:
Delphi-Quellcode:
type
  PSHARE_INFO_502 = ^_SHARE_INFO_502;

var
  aShareBuffer, aWorkBuffer: PSHARE_INFO_502;
  dwEntriesRead: Cardinal;
Der Delphi-Compiler wirft mir aber hinter
@aShareBuffer, folgenden Fehler in's Gesicht:
Ausgabe des Compilers
[Fehler] MainUnit.pas(42): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

Mir ist klar, was mir Delphi damit sagen will, aber in meinen Augen ist das alles richtig.

Die Definition der Funktion in den Jedi-Übersetzungen lautet so:
Delphi-Quellcode:
function NetShareEnum(servername: LPTSTR; level: DWORD; var butptr: Pointer;
  prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
  resume_handle: PDWORD): NET_API_STATUS; stdcall;
Wo ist da der Hund begraben?

Chris
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:31
Moin.
Also, wenn ich das richtig sehe, ist aShareBuffer ja ein Zeiger, nicht wahr?
Und ein var-Parameter vom Typ Pointer ist dann doch schon von sich aus ein Zeiger auf den Zeiger, oder?
Und folglich übergibst du mit @aShareBuffer einen Zeiger auf einen Zeiger, der aber durch das var nochmal referenziert wird, stimmt's?

Und wenn ich das tatsächlich richtig sehe, musst du einfach mal das @ vor aShareBuffer wegnehmen...
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
 
#3

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:33
Hi,
leider der exakt identische Fehler.

Chris
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:33
Komisch, bei mir kompiliert das ohne das @...
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
 
#5

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:36
Hi,
dann stelle ich jetzt einfach mal die Behauptung auf, dass das daran liegt, dass du D3 hast und ich D7... Das wäre die einfachste Erklärung.
Aber irgendwie muss das doch gehen. Schließlich ist NetUserEnum (zum auflisten von Benutzern auf einem Rechner) nahezu identisch aufgebaut und dort hat es funktioniert. Als letzte Erklärung bliebe mir nur noch, dass es ein kleiner Fehler in der Headerübersetzung ist. Oder hat jemand eine andere Idee oder gar eine Lösung?

Chris
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:43
Ich hab's in D4 probiert ;c)
Und extra für dich hab' ich's jetzt auch nochmal in D7Personal probiert und es funktioniert auch. Ich muss dazu sagen, dass ich nicht die Jedi-Header habe, sondern lediglich deine Deklaration inkludiert und wie folgt abgeändert habe:
Delphi-Quellcode:
  function NetShareEnum(servername: LPTSTR; level: DWORD; var butptr: Pointer;
  prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
  resume_handle: PDWORD): Integer; stdcall; external 'netapi32.dll';
Ich habe also den Rückgabewert (der ja egal ist) geändert, weil der andere Typ nicht bekannt ist, und die external-Deklaration hinzugefügt. An der Parametern habe ich nichts gedreht. Und dann habe ich einfach einen untypisierten Pointer übergeben.
So, und jetzt habe ich mal probiert, einen Zeiger auf was anderes zu übergeben, und da bekomme ich denselben Fehler wie du. Also caste ich den Zeiger in einen Pointer, und siehe da, es funktioniert ;c)
Probier' also mal
Code:
Pointer(aShareBuffer)
zu übergeben.
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
 
#7

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:49
Hi,
super! Das funktioniert. Hätte man ja fast drauf kommen müssen. *g*

Allerdings werden mir jetzt immer nur die ersten Buchstaben der Ergebnisse angezeigt. Aber allen Anschein nach sind es wirklich die richtigen Freigaben, nur halt nur der 1. Buchstabe. Woran kann das jetzt wieder liegen?
Entweder bin ich heute nicht ganz fit oder ich bin - mal wieder - mit meinem WinAPI-Latein am Ende.

Chris
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 18:55
Benutzt du 9x oder NT?
[Edit]Schon gut, hat sich erledigt, 502 wird von 9x ja gar nicht unterstützt ;c)[/edit]

Aber ich nehme an, du hast drauf geachtet, dass es sich um einen Unicode-String (d.h. WideChar) handelt?
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
 
#9

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 19:11
Hi,
nicht das ich wüsste. Was muss ich denn da spezielles beachten?

Chris
  Mit Zitat antworten Zitat
OregonGhost

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

Re: Probleme mit NetShareEnum

  Alt 25. Sep 2004, 19:14
Ich arbeite zu wenig mit Delphi (und mit Unicode (c; ), als dass ich wüsste, wie es Unicode handhabt. Aber WideChars bestehen im allgemeinen aus zwei Byte. Es ist also möglich, dass das jeweils erste Zeichen einen Code hat, der im ersten Byte dem Ascii-Code entspricht, im zweiten jedoch 0 ist. Und 0 ist bei AnsiStrings im allgemeinen das String-Ende-Zeichen. Du kannst mal ausprobieren, den Namen des Shares mit WideCharToString in einen normalen String umzuwandeln und dann schau mal, ob der dann richtig ist.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:40 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