Mir ist nicht klar warum du mit PWideChar arbeiten willst, aber nicht mit WideString.
In neueren Delphiversionen ist String = UnicodeString definiert. Einer direkten Zuweisung im Setter oder Getter steht da nichts im Wege.
Um die Speicherverwaltung und Typkonvertierung sollte sich Delphi doch eigentlich selbst kümmern?
Delphi-Quellcode:
IDMSUserExchange =
interface(IInterface)
[
GUID]
function GetUserName: WideString;
procedure SetUserName(
const AValue: WideString);
property UserName: WideString
read GetUserName
write SetUserName;
end;
TDMSInternalUserData =
class(TInterfacedObject, IDMSUserExchange)
private
FUserName:
string;
// <-- Hier string
protected
{$REGION 'IDMSUserExchange'}
function GetUserName: WideString;
procedure SetUserName(
const AValue: WideString);
{$ENDREGION}
end;
implementation
function TDMSInternalUserData.GetUserName: WideString;
begin
Result := FUserName;
end;
procedure TDMSInternalUserData.SetUserName(
const AValue: WideString);
begin
FUserName := AValue;
end;
procedure TuWasMitUserData(AUserData: IDMSUserExchange;
const AValue:
string);
begin
AUserData.UserName := AValue;
end;
Wenn die Arbeit mit Objekten sein muss, kannst du aber für die Objekte Properties definieren, die andere Typen zur Verfügung stellen als das Interface.
Ich sehe dafür aber keine Notwendigkeit.
Delphi-Quellcode:
TDMSInternalUserData = class(TInterfacedObject, IDMSUserExchange)
private
FUserName: string; // <-- Hier string
protected
{$REGION 'IDMSUserExchange'}
function GetUserName: WideString;
procedure SetUserName(const AValue: WideString);
{$ENDREGION}
public
property UserName: string read FUserName write FUserName;
end;