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;
配列の長さに対してさまざまな値を試しました。これが正しい宣言であることをどこかで読んだことがありますが、完全にはわかりません。また、コメントアウトされた行は、Microsoftドキュメントが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ループを設定しようとしましたが、設定しないと巨大になります。
この質問に必要なコードを省略した場合はお知らせください。できるだけ早く取得します。
ありがとう