In een header file van de AMD Core Math Library (AMCL) kom ik de volgende regel tegen:
De user guide (gebaseerd op FORTRAN) zegt er het volgende over:
Als ik de functie in Delphi aanroep met mode = 0, retourneert hij weliswaar de waarde nul in info, maar wordt ergens een geheugenblok klaarblijkelijk gecorrumpeerd. Gevolg: een crash op een onvoorspelbaar moment. Een aansluitende aanroep van scfft met mode = 1 geeft voor info de waarde 1 of 2; ik heb geen idee wat die foutcodes betekenen.
Heeft iemand een idee wat ik verkeerd doe? Klopt de header translation wel?
C:
In mijn header translation naar Delphi maak ik dit ervan:1
| extern void scfft(int mode, int n, float *x, float *comm, int *info); |
Delphi:
1
2
| procedure scfft(mode, n: Integer; var x, comm: Single; out info: Integer); stdcall; |
De user guide (gebaseerd op FORTRAN) zegt er het volgende over:
x en comm zijn dus placeholders voor een array.SCFFT(MODE,N,X,COMM,INFO)
[Input] INTEGER MODE
The value of MODE on input determines the operation performed by SCFFT.
On input:
• MODE=0 : only initializations (specific to the value of N) are performed;
this is usually followed by calls to the same routine with MODE= 1.
• MODE=1 : a real transform is performed. Initializations are assumed to
have been performed by a prior call to SCFFT.
• MODE=2 : initializations and a real transform are performed.
[Input] INTEGER N
On input: N is the length of the real sequence X
[Input/Output] REAL X(N)
On input: X contains the real sequence of length N to be transformed.
On output: X contains the transformed Hermitian sequence.
[Input/Output] REAL COMM(2*N+100)
COMM is a communication array. Some portions of the array are used to
store initializations for subsequent calls with the same sequence length N. The
remainder is used as temporary store.
[Output] INTEGER INFO
On output: INFO is an error indicator. On successful exit, INFO contains 0.
If INFO = -i on exit, the i-th argument had an illegal value.
Example:Fortran:
1 2 3 4 5 6 7 CALL SCFFT(0,N,X,COMM,INFO) CALL SCFFT(1,N,X,COMM,INFO) CALL SCFFT(1,N,Y,COMM,INFO) DO 10 I = 1, N X(I) = X(I)*Y(N-I+1) 10 CONTINUE CALLD CSFFT(1,N,X,COMM,INFO)
Als ik de functie in Delphi aanroep met mode = 0, retourneert hij weliswaar de waarde nul in info, maar wordt ergens een geheugenblok klaarblijkelijk gecorrumpeerd. Gevolg: een crash op een onvoorspelbaar moment. Een aansluitende aanroep van scfft met mode = 1 geeft voor info de waarde 1 of 2; ik heb geen idee wat die foutcodes betekenen.
Heeft iemand een idee wat ik verkeerd doe? Klopt de header translation wel?
Een goede grap mag vrienden kosten.