AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Vom Record gehen teile verloren
Thema durchsuchen
Ansicht
Themen-Optionen

Vom Record gehen teile verloren

Ein Thema von venice2 · begonnen am 14. Jul 2021 · letzter Beitrag vom 14. Jul 2021
 
venice2
(Gast)

n/a Beiträge
 
#1

Vom Record gehen teile verloren

  Alt 14. Jul 2021, 13:27
Ich habe nen Record und schicke diesen zu einer 32Bit EXE.
Verändere dabei aber nur bestimmte bereiche.
Nicht lachen.. aber wenn ein Eintrag überschritten wird nimmt die Exe einfach nichts mehr an.

Warum?

Beispiel:
Der record in beiden Exe gleich 64 und 32Bit
Delphi-Quellcode:
  PSOP64 = ^TSOP64;
  TSOP64 = record
    PluginFile: array[0..MAX_PATH - 1] of AnsiChar;
    ConfigFile: array[0..MAX_PATH - 1] of AnsiChar;
    UseSlowFade: BOOL;
    ViewportWidth: Integer;
    ViewportHeight: Integer;
    SlowFadeVal: Integer;
    ParentHandle: HWND;
    FFTAmpVal: Integer; // Dieser Eintrag funktioniert einfach nicht
    FFT: array [0 .. 511] of single;
    Wave: array [0 .. 1023] of smallint;
    Position: DWORD;
  end;
Wird so abgeschickt.

Delphi-Quellcode:
procedure SOP_FFTAmpVal;
begin
  if (gp.hSOPlugin <> 0) then
  begin
    gSOP.FFTAmpVal := gBin.FFTAmpVal;
    gCDS.dwData := dwData_FFTAmpVal;
    gCDS.cbData := SizeOf(gSOP);
    gCDS.lpData := @gSOP;
    SendMessage(gp.hSOPlugin, WM_COPYDATA, WPARAM(gP.MainHandle), LPARAM(@gCDS));
  end;
end;
gBin.FFTAmpVal; (gBin ist ein record mit diversen globalen variablen)
Wenn ich nun meinen Slider bewege wird die Value geändert und an SOP_FFTAmpVal übergeben.

In der 32Bit Exe wird sie so angenommen.
Delphi-Quellcode:
    WM_COPYDATA:
      begin
        pCDS := Pointer(lP);
        case pCDS.dwData of
          5:
            begin
              pSOP := Pointer(pCDS.lpData);
              FFTSAmplification := (11 - Max(1, Min(4, pSOP.FFTAmpVal))) / 10;
            end;
        end;
      end;
pSOP.FFTAmpVal bleibt immer 0.
Verschiebe ich den Eintrag aber an einer höheren Stelle innerhalb des Record (TSOP64) dann funktioniert es.
Was für seltsame Dinge gehen da wieder vor sich.

Die Übergabe der Arrays für die Visualisierung haben kein Problem daher verstehe ich das nicht
obwohl diese unter dem Eintrag vom FFTAmpVal stehen.

Übergeben!
Delphi-Quellcode:
      if (gP.hSOPlugin <> 0) then
      begin
        if (IsMenuChecked(IDC_PLUGIN, hCtrl)) then
        begin
          FFFTdata := GetFFTData;
          CopyMemory(@gSOP.FFT[0], @FFFTdata, 512);
          gSOP.Position := StreamPos;

          FWaveData32 := GetWaveData;
          CopyMemory(@gSOP.Wave[0], @FWaveData32, 1024);
          gCDS.dwData := dwData_OpenGL;
          gCDS.cbData := SizeOf(gSOP);
          gCDS.lpData := @gSOP;
          SendMessage(gP.hSOPlugin, WM_COPYDATA, WPARAM(gP.MainHandle), LPARAM(@gCDS));
        end;
      end;
Und Angenommen\Ausgewertet innerhalb der 32Bit Exe
Delphi-Quellcode:
    WM_COPYDATA:
      begin
        pCDS := Pointer(lP);
        case pCDS.dwData of
          0:
            begin
              pSOP := Pointer(pCDS.lpData);
              Position := pSOP.Position;
              RenderOpenGL(VisHandle, @pSOP.Wave, @pSOP.FFT, Position);
            end;
        end;
      end;
Mir fällt nichts mehr ein was das auslösen könnte.

64Bit Anwendung (verwendet die Bass.dll 64Bit) zur 32Bit Anwendung die dann 32Bit.dll's Sonique Plugins visualisiert.
Ich habe immer davon geredet das man 32Bit Dll's sehr wohl mit einer 64Bit Anwendung verwenden kann.
Wollte das mal hier Demonstrieren es scheint aber doch kleine Problem zu geben.

Vielleicht den 64Bit Record auf 32Bit trimmen?
Wenn dann nur wie?

PS:
Ich bekomme es auch nicht gebacken das ich beide Exe Dateien miteinander in der IDE Debuggen kann.

Geändert von venice2 (19. Jul 2021 um 22:33 Uhr)
  Mit Zitat antworten Zitat
 


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 01:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz