代码如下:
function NetShareFolder(const ServerName:PWideChar;const NetName:String;
         const Re:String;const Permissions:DWORD;
         const Max_Uses: LongInt;const Current_Uses:DWORD;
         const Path:String;const PassWD:PWideChar):LongInt;
var
Buf: PUSER_INFO_1;
begin
GetMem(Buf, Sizeof(Buf));
with Buf^ do
begin
     Buf.shi2_netname := @WideString(NetName)[1];
     Buf.shi2_type := STYPE_DISKTREE;
     Buf.shi2_re := @WideString(Re)[1];
     Buf.shi2_permissions := Permissions;
     Buf.shi2_max_uses := Max_Uses;
     Buf.shi2_current_uses := Current_Uses;
     Buf.shi2_path := @WideString(Path)[1];
     Buf.shi2_passwd := PassWD;
   end;     result := NetShareAdd(ServerName, 2, Pointer(Buf), 0);
   FreeMem(Buf);
end;

解决方案 »

  1.   

    问题出在调用GetMem时第二个参数,SizeOf(Pointer)总是返回4,
    因此需要用类型指针的基本类型(base-type)。如:type
      TData = record
        ID:  Integer;
        Sex: Char;
        Age: Integer;
      end;  PData = ^TData;procedure Demo;
    var
      D: TData;
      P: PData;
    begin
      GetMem(P, SizeOf(TData));
    {
      如果写成
      GetMem(P, SizeOf(PData));
      那么结果就是,指针P指向一块内存,该块内存尺寸只有4个字节。
    }
      P^.ID  := 20;
      P^.Sex := 'F';
      P^.Age := 25;
      D := P^;
      FreeMem(P);
      with D do ShowMessage(Format('%d %s %d', [ID, Sex, Age]));
    end;
      

  2.   

    我觉得你的buf定义有错误。
    var 
      Buf: ^SHARE_INFO_2;
      

  3.   

    当然,如果能直接使用类型指针的基本类型,就不必使用类型指针来绕弯子了。具体情况具体分析。推荐首选非指针类型,因为它们的内存管理完全由Delphi为你代劳了。
      

  4.   

    谢谢cnsuyong(小可),我的mail是[email protected],以后常联系呀,能给我你的mail吗?