Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#12

Re: PWideChar und PAnsiChar

  Alt 18. Apr 2009, 18:36
hmmm, vielleicht legt da Delphi ja mehrere TempStrings an ... die Code-Optimierung ist schon schlimm/verworren -.-°


hier mal ein einfaches Beispiel, welches "NICHT" funktionieren könnte
Delphi-Quellcode:
// 'ne Form1 mit 2 TEdit's

Function Test(S: WideString): PAnsiChar;
  Begin
    Result := PAnsiChar(AnsiString(S));
  End;

Procedure TForm1.FormCreate(Sender: TObject);
  Var P: PAnsiChar;
    i: Integer;
    A: Array[0..1000] of String;

  Begin
    P := Test('123456789');
    Edit1.Text := P;

    P := Test('123456789');
    For i := Low(A) to High(A) do
      A[i] := StringOfChar(AnsiChar(#65), 10);
    Edit2.Text := P;
  End;
[add]
nutzt du kein FastMM oder ShareMem für deine DLL?
nja, dann hast du Glück, daß deine DLL einen eigenen Speichermanager nutzt
und dieser gerade den genutzten Speicherblock zufällig nicht freigibt.

[add2]
eventuell geht es so "NICHT" besser *hust*
Delphi-Quellcode:
function BASS_AIMP2VIS_GetName(handle: HVIS): PAnsiChar; stdcall;
var
  PluginInfo: PWideChar;
  i: Integer;
  A: Array of AnsiString;

begin
  SetLength(A, 1000000);
  for i := 0 to High(A) do
    A[i] := StringOfChar(AnsiChar(#65), 18);

  Result := nil;

  if (not A_ValidHandle(handle)) then
  begin
    BassFuncs^.SetError(BASS_ERROR_HANDLE);
    Exit;
  end;

  VisInfo := PAIMPVisInfo(Handle);

  BassFuncs^.SetError(BASS_OK);
  PluginInfo := VisInfo^.VisPointer.PluginInfo;

  Result := PAnsiChar(AnsiString(PluginInfo));

  if A[20] = 'then ;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat