Announcement

Collapse
No announcement yet.

Nochmal zu NetShareAdd. Ich hab es soweit im Griff, aber ...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nochmal zu NetShareAdd. Ich hab es soweit im Griff, aber ...

    Hiho ...<br>
    Nach einigen Stunden an Recherche und Unterhaltungen mit C++ Programmierern und keine Ahnung wievielen Ausdrucken von C-Header Dateien habe ich nun folgendes Ergebnis:<br>
    <br>
    Das Struct _Share_Info_50 sieht so aus:<br>
    <br>
    <pre>
    Type ShareIt = record
    shi50_netname : Array[0..12] of Char;
    shi50_type : Byte;
    shi50_flags : Word;
    shi50_remark : ^PChar;
    shi50_path : ^PChar;
    shi50_rw_password : Array[0..8] of Char;
    shi50_ro_password : Array[0..8] of Char;
    end;
    </pre>
    <br>
    Im QuellText versuche ich nun C:\Programme freizugeben:<br>
    <br>
    <pre>
    Procedure Freigeben;
    var Path, Remark : PChar;
    begin
    Path := 'C:\PROGRAMME\'; //Alles UpperCase wie Beschrieben (SDK)
    Remark := 'ICH BIN EINE BESCHREIBUNG';
    <br>
    Share.shi50_netname := 'FREIGEGEBEN'; //Ist dann doch der Name, der in der Netzwerkumgebung gilt, oder ??? Also mit \\PCNAME\FREIGEGEBEN\ anzusprechen<br>
    Share.shi50_type := 0; //STYPE_DISKTREE
    Share.shi50_flags := 1; //SHI50F_RDONLY
    Share.shi50_remark := @Remark; //Ist die Beschreibung der Freigabe, wenn ich das richtig verstanden habe
    Share.shi50_path := @Path; //Alles UpperCase so wie Beschrieben (SDK)
    Share.shi50_rw_password := ''; //Soll nicht vergeben werden ...
    Share.shi50_ro_password := ''; //Soll nicht vergeben werden ...
    <br>
    ShowMessage(IntToStr(NetShareAdd(NIL, 50, @Share, SizeOf(Share))));
    end;
    </pre>
    ShowMessage gibt 2116 wieder, also den Fehler: The Device or Directory does not exist (NERR_UnknownDevDir).<br>
    So sieht es aus, allerdings verstehe ich das nicht so ganz, da der Ordner existiert, C logischerweise auch. Habe ich Zuweisungen vertauscht / falsch verstanden ??? Liegt das daran das ich als ServerName NIL übergebe ???<br>
    Ich hoffe das ist nun so genau beschrieben das mir jemand helfen kann. Der Aufwand sollte nun auch nicht mehr so groß sein ... <br><br>
    Ciao Hagen<br><br>
    P.S.: Hr. Kosch sie können meine E-Mail nun hoffentlich löschen ...

  • #2
    <p>Hallo Hagen,<br>
    <br>
    das Problem kann daran liegen, dass Du für Deine PChar's keinen Speicherplatz reservierst.<br>
    <pre>
    statt:
    Path := 'C:\PROGRAMME\'; //Alles UpperCase wie Beschrieben (SDK)
    Remark := 'ICH BIN EINE BESCHREIBUNG'
    ...
    so:
    try
    Path:=AllocMem(Length('C:\PROGRAMME\'));
    StrCopy(Path, 'C:\PROGRAMME\');
    Remark:=AllocMem(Length('ICH BIN EINE BESCHREIBUNG'));
    StrCopy(Remark, 'ICH BIN EINE BESCHREIBUNG');
    ...
    finally
    FreeMem(Remark);
    FreeMem(Path)
    end;
    </pre>
    Gruß Thomas</p&gt

    Comment


    • #3
      Hallo,

      ich habe noch nicht reingesehen, aber das nächste Mal bitte nicht mehr 210 kByte compilierte EXE mitschicken. Zum einen dauert der Download länger und zum anderen lösche ich generell alle EXE - man kann ja nie wissen ;-)

      Im C-Beispiel aus der Platform-SDK-Hilfe sieht das so aus:
      <pre>
      {
      //
      // Fill in the SHARE_INFO_2 structure.
      //
      p.shi2_netname = TEXT("TESTSHARE");
      p.shi2_type = STYPE_DISKTREE; // disk drive
      p.shi2_remark = TEXT("TESTSHARE to test NetShareAdd");
      p.shi2_permissions = 0;
      p.shi2_max_uses = 4;
      p.shi2_current_uses = 0;
      p.shi2_path = TEXT("C:\\");
      p.shi2_passwd = NULL; // no password
      //
      // Call the NetShareAdd function,
      // specifying level 2.
      //
      res=NetShareAdd(argv[1], 2, (LPBYTE) &p, &parm_err);
      //
      // If the call succeeds, inform the user.
      //
      if(res==0)
      printf("Share created.\n");

      // Otherwise, print an error,
      // and identify the parameter in error.
      //
      else
      printf("Error: %u\tparmerr=%u\n", res, parm_err);
      }
      return;
      </pre>
      Ich würde daher für den ersten Test ebenfalls die Schreibweise <b>C:\\</b> verwenden

      Comment


      • #4
        Vielen Dank!
        Ich werde das direkt ausprobieren. Entschuldigung an Hr. Kosch, war keine Absicht, ich habe vergessen alle unwichtigen Dateien zu löschen ... Das nächste mal denke ich dran.

        Ciao Hagen

        P.S.: Das man für einen PChar Speicher reservieren muss hätte ja auch mal einer sagen können ... ;

        Comment


        • #5
          ES KLAPPT ... Allerdings nur, wenn man Remark und Path nicht als Pointer übergibt, dann kommt es zum selben Fehler ...

          Danke nochmal an alle die mich ertragen haben und mich wahrscheinlich auch weiterhin noch ertragen müssen ...

          Ciao Hage

          Comment

          Working...
          X