Zitat von
SirThornberry:
d.h du arbeitest mit ShareMem? Nicht das in D2006 ShareMem incompatibel zu ShareMem von D7 geworden ist oder sich die Strings intern irgendwie geändert haben.
Du könntest versuchen ob der Fehler bei den Kunden auch kommt wenn du die
DLL mit Delphi7 kompilierst. Oder ist das schon der Fall?
habe oben nochmal editiert.
Nein eigentlich nicht.
Die Funktion befindet sich direkt in der *.dpr vielleicht verursacht dies das Problem
Kann ich mir aber eigentlich auch nicht vorstellen.
Delphi-Quellcode:
function BASS_VIS_FindPlugins(vispath: PChar; flags: DWORD): PChar; stdcall;
var
fPath: PChar;
i, z: Integer;
Plugins: String;
DllHandle: THandle;
VisList: TStringList;
sSonique, sWinamp, fRecursive: Boolean;
procedure SearchDir(const dPath: String);
var
x: Integer;
sRec: TSearchRec;
begin
if (sSonique) then
begin
x := FindFirst(dPath + '*.svp', faAnyFile, sRec);
while (x = 0) do
begin
if (FileExists(dPath + sRec.Name)) then
VisList.Add(dPath + sRec.Name);
x := FindNext(sRec);
end;
FindClose(sRec);
(* <-- START --> UltraPlayer vis *)
x := FindFirst(dPath + '*.uvs', faAnyFile, sRec);
while (x = 0) do
begin
if (FileExists(dPath + sRec.Name)) then
VisList.Add(dPath + sRec.Name);
x := FindNext(sRec);
end;
FindClose(sRec);
(* <-- END --> UltraPlayer vis *)
end
else if (sWinamp) then
if BassVisInit then
begin
x := FindFirst(dPath + '*.dll', faAnyFile, sRec);
while (x = 0) do
begin
if (FileExists(dPath + sRec.Name)) then
VisList.Add(dPath + sRec.Name);
x := FindNext(sRec);
end;
FindClose(sRec);
end else
begin
BassFuncs^.SetError(BASS_ERROR_INIT);
exit;
end;
if (fRecursive) then
begin
x := FindFirst(dPath + '*.*', faAnyFile, sRec);
while (x = 0) do
begin
if (sRec.Name <> '.') and (sRec.Name <> '..') and (DirectoryExists(dPath + sRec.Name)) then
SearchDir(dPath + sRec.Name + '\');
x := FindNext(sRec);
end;
FindClose(sRec);
end;
end;
begin
Result := nil;
if (((flags and BASS_VIS_FIND_SONIQUE) <> BASS_VIS_FIND_SONIQUE) and ((flags and BASS_VIS_FIND_WINAMP) <> BASS_VIS_FIND_WINAMP)) or
(((flags and BASS_VIS_FIND_SONIQUE) = BASS_VIS_FIND_SONIQUE) and ((flags and BASS_VIS_FIND_WINAMP) = BASS_VIS_FIND_WINAMP)) then
begin
BassFuncs^.SetError(BASS_ERROR_ILLPARAM);
Exit;
end;
if (FindPluginsPtr <> nil) then
StrDispose(FindPluginsPtr);
VisList := TStringList.Create;
sSonique := ((flags and BASS_VIS_FIND_SONIQUE) = BASS_VIS_FIND_SONIQUE);
sWinamp := ((flags and BASS_VIS_FIND_WINAMP) = BASS_VIS_FIND_WINAMP);
fRecursive := ((flags and BASS_VIS_FIND_RECURSIVE) = BASS_VIS_FIND_RECURSIVE);
fPath := StrAlloc(Length(StrPas(vispath)) + 2);
StrCopy(fPath, vispath);
if (fPath[Length(StrPas(fPath)) - 1] <> '\') then
StrCat(fPath, '\');
SearchDir(StrPas(fPath));
StrDispose(fPath);
if (VisList.Count = 0) then
begin
VisList.Free;
BassFuncs^.SetError(BASS_OK);
Exit;
end;
for i := VisList.Count - 1 downto 0 do
begin
SetCurrentDirectory(PChar(ExtractFileDir(VisList[i])+ #0));
DllHandle := LoadLibrary(PChar(VisList[i]+ #0));
if (DllHandle <> 0) then
begin
if (sSonique) and (GetProcAddress(DllHandle, 'QueryModule') = nil) then
VisList.Delete(i)
else if (sWinamp) and (GetProcAddress(DllHandle, 'winampVisGetHeader') = nil) then
VisList.Delete(i);
end
else
VisList.Delete(i);
FreeLibrary(DllHandle);
end;
if ((flags and BASS_VIS_FIND_COMMALIST) = BASS_VIS_FIND_COMMALIST) then
begin
FindPluginsPtr := StrAlloc(Length(VisList.CommaText) + 1);
StrPCopy(FindPluginsPtr, VisList.CommaText);
end
else
begin
z := 0;
Plugins := '';
for i := 0 to VisList.Count - 1 do
begin
z := z + Length(VisList[i]) + 1;
Plugins := Plugins + VisList[i] + #0;
end;
Plugins := Plugins + #0;
FindPluginsPtr := StrAlloc(z + 1);
CopyMemory(FindPluginsPtr, PChar(Plugins), z + 1);
end;
VisList.Free;
BassFuncs^.SetError(BASS_OK);
Result := FindPluginsPtr;
end;
Zitat:
Du könntest versuchen ob der Fehler bei den Kunden auch kommt wenn du die
DLL mit Delphi7 kompilierst. Oder ist das schon der Fall?[/
habs noch nicht getestet wäre aber eine möglichkeit das mal zu probieren.
Gruss Emil