首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >德尔菲: NetShareGetInfo及其路径为空

德尔菲: NetShareGetInfo及其路径为空
EN

Stack Overflow用户
提问于 2015-12-17 12:21:57
回答 1查看 254关注 0票数 0

我想得到分享的道路,我就是这样做的:

代码语言:javascript
运行
复制
Type
  TShareInfo2 = record
    shi2_netname: LPTSTR;
    shi2_type: DWORD;
    shi2_remark: LPTSTR;
    shi2_permissions: DWORD;
    shi2_max_uses: DWORD;
    shi2_current_uses: DWORD;
    shi2_path: LPTSTR;
    shi2_passwd: LPTSTR;
  End;

Function NetShareGetInfo(servername: LPWSTR; netname: LPWSTR; level: DWORD; bufptr: LPBYTE): DWORD; stdcall;

Var
  ShareInfo2: TShareInfo2;
  PChNetName, PChPath: array [0..255] of WideChar;
  ShareResult: Integer;
Begin
  With ShareInfo2 Do Begin
    shi2_netname := @PChNetName;
    shi2_type := 0;
    shi2_remark := nil;
    shi2_permissions := 0;
    shi2_max_uses := DWORD(-1);
    shi2_current_uses := 0;
    shi2_path := @PChPath;
    shi2_passwd := nil;
  End;
  ShareResult := NetShareGetInfo(Nil, PChar(FOld.sShareName), 2, @ShareInfo2);

  ShowMessage('Result='  + IntToStr(ShareResult)      +
              'PChPath=' + WideCharToString(PChPath)  );
End;

ShareResult为0,但PChPath为空。当然,这一份额是存在的。

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 12:33:10

要调用的函数不填充所提供的记录。它不填充您提供的字符串缓冲区。相反,它为结构分配内存,并返回该结构的地址。

您的代码应该是:

代码语言:javascript
运行
复制
Var
  ShareInfo2: ^TShareInfo2;
  ShareResult: Integer;
Begin
  ShareResult := NetShareGetInfo(Nil, PChar(FOld.sShareName), 2, @ShareInfo2);
  if Result = 0 then begin
    ShowMessage(WideCharToString(ShareInfo2.PChPath));
    NetApiBufferFree(ShareInfo2);
  end;
End;

这里可能有一些错误,因为我看不到您对NetShareGetInfoNetApiBufferFreeTShareInfo2的声明。但正如我所描述的,问题的实质是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34334482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档