Result := PAnsiChar(AnsiString(PluginInfo));
Hier hast du nur ein Problem:
Delphi legt da eine interne AnsiString-Variable an, welche in diesem Fall beim End. der Funktion freigegeben wird ... und du hast nur Glück, wenn danach rein zufällig der AnsiTest noch im
RAM rumgammelt.
Wie gesagt, du
mußt eine externe Variable für die
Ansi-Version nutzen.
Nur hast du da ein Problem wenn diese Funktion mehrmals aufgerufen wird, da dann die Daten in der externen Variable nicht mehr konsistent sind.
Wenn nur EINE externe Variable genutzt würde, dann würde hier
Delphi-Quellcode:
P1 := BASS_AIMP2VIS_GetName(H1);
P2 := BASS_AIMP2VIS_GetName(H2);
P1 keine korrekten Daten mehr enthalten, da die für P1 verwendete Temp-Variable inzwischen für P2 verwendet wird.
Probier es mal so und schau was diese Funktion nun für einen Text zurückliefert
Delphi-Quellcode:
function BASS_AIMP2VIS_GetName(
handle: HVIS): PAnsiChar;
stdcall;
var
PluginInfo: PWideChar;
i: Integer;
S: WideString;
P: PAnsiChar;
begin
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));
for i := 0
to 1000
do
begin
S := StringOfChar(WideChar(#123), 50);
P := PAnsiChar(AnsiString(PluginInfo));
if P = 123
then ;
end;
end;