我需要構造一個字符串並通過PostMessage
發送它,即。Concat PChar在Delphi中的字符串
FileName := String_1 + String_2 + String_3;
PostMessage(FWndHandle, WM_BLA_BLA, NotifyData^.Action, LParam(FileName));
但有些東西不起作用。另外,FileName是一個PChar。代碼如下所示:
var
FileName : PChar;
Directory_Str : String;
AnotherString : String;
begin
// Get memory for filename and fill it with data
GetMem(FileName, NotifyData^.FileNameLength + SizeOf(WideChar));
Move(NotifyData^.FileName, Pointer(FileName)^, NotifyData^.FileNameLength);
PWord(Cardinal(FileName) + NotifyData^.FileNameLength)^ := 0;
// TODO: Contact string before sending message
// FileName := AnotherString + Directory_Str + FileName;
PostMessage(FWndHandle, WM_BLA_BLA, NotifyData^.Action, LParam(FileName));
...
end;
現在我需要做的調用PostMessage
,即之前與另一個字符串變量FileName
。
FileName := AnotherString + Directory_Str + FileName;
PostMessage(FWndHandle, WM_BLA_BLA, NotifyData^.Action, LParam(FileName));
這將工作,如果FileName是一個字符串,這不是這裏的情況。
任何人都知道如何用PChar做到這一點?我嘗試這些方法,有時工作但總是打破的東西在最後:
StrPCopy(FileName, FDirectory + String(FileName));
OR
FileName := PChar(AnotherString + Directory_Str + FileName);
什麼是「某些東西不能工作」和「總是在最後突破」是什麼意思?你有什麼具體的問題?你爲什麼使用'PChar'和'GetMem'呢? (IOW,你爲什麼要混合這些類型呢?) –
PostMessaging字符串的一個問題是,在目標線程/窗口收到字符串之前,字符串往往會被破壞 - PostMessage只是傳遞指針,它對字符串的refCount一無所知,所以不會增加它。 –
@MartinJames這就是爲什麼問題中的代碼用'GetMem'分配緩衝區的原因。 –