AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

was macht System.IsMultiThread genau?

Ein Thema von EWeiss · begonnen am 31. Mär 2007 · letzter Beitrag vom 2. Apr 2007
Antwort Antwort
Seite 2 von 3     12 3      
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: was macht System.IsMultiThread genau?

  Alt 1. Apr 2007, 11:12
ich versuchs nochmal
Mein problem BassVis läßt sich in der environment von D7 aus der dort erstellten EXE nicht debuggen bei anderen usern.
Bei mir funktioniert es seltsamer weise ohne probleme.

Was könnte dieses Problem verursachen.
Habe es schon mit System.IsMultiThread versucht da der Thread in BassVis mit Create und nicht mit Begin
erstellt wird.

Jemand noch ideen ?

Würd mich mal interessieren ob das bei euch auch der fall ist.
Hier das Archiv..

2 Delphi projekte .. Sonique und Winamp.
Es geht also um D7 nicht um Do6

Delphi-Quellcode:
procedure TfrmMain.GetPlugin;
var
  IntI : integer;

begin

  // clear plugin list
  PluginList.Clear;

  // create temp list for new list of vis
  flist := TStringList.Create;

  // find out vis plugins
  flist.CommaText := BASS_VIS_FindPlugins(PChar(PluginDir),
                                          BASS_VIS_FIND_WINAMP or
                                          BASS_VIS_FIND_RECURSIVE or
                                          BASS_VIS_FIND_COMMALIST);
Hier einen breakpoint setzen flist.CommaText :=
Dort soll angeblich der AV immer auftreten.

gruss Emil
Angehängte Dateien
Dateityp: rar delphi_105.rar (432,8 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#12

Re: was macht System.IsMultiThread genau?

  Alt 1. Apr 2007, 12:05
Riecht für mich nach Problemen mit dem Memory Manager... Ich hab leider kein Delphi 7, sonst würd ich da mal reinschauen. Am Breakpoint in die CPU-Ansicht umschalten und dort drin dann Opcode für Opcode vorwärts, dann sollte klarer werden, was da passiert. So aus der Ferne ist das aber auch nur Spekulation. Wäre z.B. hilfreich wenn man den ganzen Meldungstext der AV hätte
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: was macht System.IsMultiThread genau?

  Alt 1. Apr 2007, 12:18
Zitat von OldGrumpy:
Riecht für mich nach Problemen mit dem Memory Manager... Ich hab leider kein Delphi 7, sonst würd ich da mal reinschauen. Am Breakpoint in die CPU-Ansicht umschalten und dort drin dann Opcode für Opcode vorwärts, dann sollte klarer werden, was da passiert. So aus der Ferne ist das aber auch nur Spekulation. Wäre z.B. hilfreich wenn man den ganzen Meldungstext der AV hätte
Hier .. aber so richtig was mit anfangen kann man auch nicht.
Da die Hintergrundinfos fehlen.
Einzigste was ich weiss das er den genannten Breakpoint gesetzt hat und dort der
Fehler dann auftritt.

Was ich noch weiss er benutzt 'madCodeHook'
ka was das ist .. hab mich nicht mit beschäftigt.

gruss Emil
Miniaturansicht angehängter Grafiken
mp3se2_555.jpg   mp3se_114.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 06:45
Ich habe folgenden Fehler festgestellt.

In einer meiner Units befand sich unter implementation eine nicht mehr vorhandene eingebundene Unit.
Aufgefallen ist mir das nachdem ich versucht habe meine DLL unter D7 zu kompilieren.

Seltsamerweise hat D06 hier keinerlei Probleme gemeldet und trotzdem die DLL kompiliert.
Denke mal das irgendwo im System (Suchpfad von D06) projekten diese Unit von D06 noch gefunden
wurde und deshalb keine fehlermeldung kam.

Kann es unterumständen daran liegen das D7 diesen Fehler beim debuggen meldet?
Weil eine nicht vorhande UNIT in die kompilierte DLL mit eingebunden wurde ?

Sehr seltsam das ganze.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 07:07
ist BASS_VIS_FindPlugins eine Funktion der DLL und gibt einen String zurück?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 07:11
Zitat von SirThornberry:
ist BASS_VIS_FindPlugins eine Funktion der DLL und gibt einen String zurück?
Delphi-Quellcode:
 // find out vis plugins
  flist.CommaText := BASS_VIS_FindPlugins(PChar(PluginDir),
                                          BASS_VIS_FIND_WINAMP or
                                          BASS_VIS_FIND_RECURSIVE or
                                          BASS_VIS_FIND_COMMALIST);
Ja.
Array string ',' als Delemiter deshalb flist.CommaText.

EDIT:
Aus der DLL

function BASS_VIS_FindPlugins(vispath: PChar; flags: DWORD): PChar; stdcall; export

BASS_VIS_FindPlugins ' Delphi
BASS_VIS_FindPlugins name 'BASS_VIS_FindPlugins@8'; 'MSVC


gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#17

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 07:14
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 07:18
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 07:30
Dll in D7 ist kleiner als die von D06 verstehe wer will.
Ganze 3Kbit

Gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#20

Re: was macht System.IsMultiThread genau?

  Alt 2. Apr 2007, 09:18
Wenn ich das richtig verstehe, ist ShareMem ja fuer PCHAR gar nicht notwendig sondern nur für die Stringtypen von Borland selber - ich hatte auch erst in die Richtung gedacht, sah dann aber das PCHAR. Wenn man in Delphi ein DLL-Projekt anlegt, stehen im vorgefertigten Kram entsprechende Kommentare...

Was das "habs zufällig bemerkt als ich die DLL nochmal kompilierte" angeht: Genau aus dem Grund hab ich mir zur Angewohnheit gemacht, mehrteilige Projekte immer in einer Projektgruppe zu halten und entsprechende Projektabhängigkeiten zu definieren. Die Zeit die man ggf. mehr fürs Kompilieren braucht, ist bei der Fehlersuche schnell wieder eingespart
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz