我在使用 delphi 从 DEV_BROADCAST_PORT 获取友好名称 (dbcp_name) 时遇到问题。
我试过使用微软帮助文档,它说它是一个指向空终止字符串的指针,但是在那个页面上有一条注释表明它是一个可变长度结构,而 dbcp_name 是一个包含实际字符的数组端口名称。
我试图提取它,但我目前还没有找到一种方法,因为当我让它返回任何东西时,它完全是胡言乱语。
我使用的代码如下:
PDevBroadcastPort = ^DEV_BROADCAST_PORT;
DEV_BROADCAST_PORT = packed record
dbcp_size : DWORD ;
dbcp_devicetype : DWORD;
dbcp_reserved : DWORD ;
dbcp_name : array[0..0] of ansichar; //TCHAR dbcp_name[1]; not valid
end;
我为数组的长度尝试了不同的值,我在某处读到这是正确的声明,但我不完全确定。注释掉的行也是微软文档为 C++ 中的行提供的内容
要提取我尝试过的信息:
var
PData: PDevBroadcastPort;
FName: string;
...
PData := PDevBroadcastPort(Msg.lParam);
ShowMessage('Length '+Inttostr(length(PData^.dbcp_name)));
FName := '';
i:=0;
while((PData^.dbcp_name[i]) <> #0) and (i < 100) do
begin
FName := FName + (PData.dbcp_name[i]);
i := i +1;
ShowMessage(FName);
end;
我尝试将 while 循环设置为在数据结构的长度处终止,但如果我不设置它,它就会变得很大。
感谢您提供任何帮助,如果我遗漏了此问题所需的任何代码,请告诉我,我会尽快获取。
谢谢