![]() |
Konvertierungs problem C nach Delphi
habe ein kleines konvertierungs problem von c nach Delphi
Code:
h ist single original(float)
h+=specdata[i*8+j+c*576];
habe es so übersetzt!
Delphi-Quellcode:
Fehler.
h+ This_Mod^.Spectrumdata[i * 8 + j + c * 576];
[Pascal Error] VisCDRom.pas(423): E2008 Incompatible types
Code:
habe es so übersetzt!
h/=(1.0f*255.0f);
Delphi-Quellcode:
Fehler.
h/ (1.0 * 255.0);
[Pascal Error] VisCDRom.pas(424): E2014 Statement expected, but expression of type 'Extended' found Habe gelesen das 'h/' auch in Delphi verwendet wird genauso wie 'h+' Zitat:
Scheint aber nicht zusammen zu passen. gruss Emil |
Re: Konvertierungs problem C nach Delphi
Ja :duck:
Habs jetzt mal so gemacht und denke das ist richtig!
Delphi-Quellcode:
Allerdings bekomme ich immer noch ein Problem wegen h = single und This_Mod^.Spectrumdata[i * 8 + j + c * 576]; Array
h := h + This_Mod^.Spectrumdata[i * 8 + j + c * 576];
h := h / (1.0 * 255.0); gruss Emil |
Re: Konvertierungs problem C nach Delphi
öhm... versuchs mal ohen dereferenzierung, delphi macht das implizit. und dann zeig mal deine definition von TMod oder was auch immer für ein strcut das ist wo du zugreifst. sind die indices, die du da benutzt, alle ganzzahlig?
|
Re: Konvertierungs problem C nach Delphi
Code:
wie ist specdata/Spectrumdata definiert?
h := h + specdata[i * 8 + j + c * 576];
// oder [s]inc(h, specdata[i * 8 + j + c * 576]);[/s] h := h / 255.0; // *grübel* // oder h := h / 255; |
Re: Konvertierungs problem C nach Delphi
Zitat:
Delphi-Quellcode:
meinst du das h := h + mit dereferenzierung ?
TWinAMPVisModule = record
Description : PChar; hWNDParent : HWND; hDLLInstance : HINST; sRate : Integer; nCh : Integer; LatencyMs : Integer; DelayMs : Integer; SpectrumNch : Integer; WaveformNch : Integer; SpectrumData : array[0..1,0..575] of byte; WaveformData : array[0..1,0..575] of byte; Config : procedure(This_Mod: PWinAMPVisModule); cdecl; Init : function(This_Mod: PWinAMPVisModule): Integer; cdecl; Render : function(This_Mod: PWinAMPVisModule): Integer; cdecl; Quit : procedure(This_Mod: PWinAMPVisModule); cdecl; UserData : Pointer; end; hier ist die ganze schleife.
Delphi-Quellcode:
Edit:
// Spektrum Analyser Daten glaetten
for c := 0 to 1 do begin for i := 0 to 72 do begin h := 0.0; for j := 0 to 8 do h := h + This_Mod^.Spectrumdata[i * 8 + j + c * 576]; h := h / (1.0 * 255.0); h := Ln(h + 1.0)* 10.0; delta :=(ElapsedTime-LastTime)* 10.0; delta2 :=(ElapsedTime-LastTime)* 2.0; if (h > heights[c][i] - delta) then h:= heights[c][i] else heights[c][i] := heights[c][i] - delta; if (h > heights2[c][i] - delta2) then begin h := heights2[c][i] end else heights2[c][i] := heights2[c][i]-delta2; end; end; Die Var's
Delphi-Quellcode:
gruss Emil
Var
i,j,c : integer; h,delta,delta2 : single; x1,x2,z1,z2,y : GLfloat; d1 : GLfloat; d2 : GLfloat; overdraw : GLfloat; h2,h3,d12d : GLfloat; hd : GLfloat; |
Re: Konvertierungs problem C nach Delphi
Zitat:
da gibt es noch 0.9, 0.8 usw .. eigenlich geht es mir nur darum single mit dem Array kompatibel zu machen (konvertieren) das will er irgendwie nicht. Zitat:
Zitat:
|
Re: Konvertierungs problem C nach Delphi
Aber mal ganz ehrlich, Spectrumdata und specdata sind nicht gleich definiert.
Code:
fällt dir was auf?
specdata = array[0..irgendwas] of MirUnbekannt
[color=#0000ff]und [/color] Spectrumdata = array[[color=#ff0000]0..1[/color], 0..575] of byte; da ist ein Wert zuviel.
Code:
steht das direkt hintereinander?
h+=specdata[i*8+j+c*576];
h/=(1.0f*255.0f); weil dann müßte es doch so auch gehn?
Code:
h := (h + This_Mod^.Spectrumdata[i * 8 + j + c * 576]) / (1.0 * 255);
[color=#ff0000] ^ die dereverenzierung ist dieses[/color] [color=#0000ff]// ohne wäre es dann so:[/color] h := (h + This_Mod.Spectrumdata[i * 8 + j + c * 576]) / (1.0 * 255); also dann sozusagen so?
Delphi-Quellcode:
h := (h + This_Mod^.Spectrumdata[i * 8 + j + c * 576]) / (1.0 * 255.0);
h := (h + This_Mod^.Spectrumdata[i * 8 + j + c * 576]) / (0.9 * 255.0); ... |
Re: Konvertierungs problem C nach Delphi
Zitat:
Nein im ernst habe da nicht nach gesehen soweit war ich noch nicht. Da bedingt durch die übersetzung sich das projekt erst gar nicht kompilieren ließ. Spätestens danach wäre es mir aufgefallen mit einer neuen Fehlermeldung welche nicht ausgebleieben wäre .. trotzdem danke für die Info. Das ist Original!
Code:
So gehts jetzt? Dank den Hinweis auf dem array ;)
for (c=0;c<=1;c++)
{ for ( i = 0; i < 72; i++ ) { h=0.0f; for (j=0;j<8;j++) h+=specdata[i*8+j+c*576]; h/=(1.0f*255.0f); h=(float)(log(h+1.0f))*10.0f; delta=(currenttime-lastcurrenttime)*10.0f; delta2=(currenttime-lastcurrenttime)*2.0f; if (h>heights[c][i]-delta) heights[c][i]=h; else heights[c][i]=heights[c][i]-delta; if (h>heights2[c][i]-delta2) heights2[c][i]=h; else heights2[c][i]=heights2[pre][i]-delta2; } }
Delphi-Quellcode:
gruss Emil
// Spektrum Analyser Daten glaetten
for c := 0 to 1 do begin for i := 0 to 72 do begin h := 0.0; for j := 0 to 8 do begin h := (h + This_Mod^.Spectrumdata[0][i * 8 + j + c * 576]); h := h / (1.0 * 255.0); h := Ln(h + 1.0) * 10.0; delta := (ElapsedTime - LastTime) * 10.0; delta2 := (ElapsedTime - LastTime) * 2.0; if (h > heights[c][i] - delta) then h := heights[c][i] else heights[c][i] := heights[c][i] - delta; if (h > heights2[c][i] - delta2) then h := heights2[c][i] else heights2[c][i] := heights2[c][i] - delta2; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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