AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi dynamisches Array an C++Dll übergeben

Delphi dynamisches Array an C++Dll übergeben

Ein Thema von hubestef · begonnen am 19. Mai 2008 · letzter Beitrag vom 19. Mai 2008
 
hubestef

Registriert seit: 19. Mai 2008
4 Beiträge
 
#1

Delphi dynamisches Array an C++Dll übergeben

  Alt 19. Mai 2008, 08:40
Hallo zusammen,

ich hab ein Problem mit Delphi und c++ und habe keine Ahnung mehr wie ich weitermachen sollte . Habe schon sehr sehr viel versucht aber noch nie di richtige Lösung gefunden.
Mein Problem ist folgendes.
Ich sollte ein dynamisches Array einer c++ dll übergeben. Diese sollte im Array Änderungen vornehmen. Nach der Ausführung der Dll muss ich aber das Array wieder im Delphi bearbeiten.
Die Übergabe an die Dll funktioniert super. Das Array wird auch von der Dll bearbeitet. Nur wenn ich in Delphi wieder darauf zugreifen möchte, dann bekomm ich nur ein leeres Array (lauter 0).
Kann mir bitte jemand sagen was da falsch sein könnte?

Die Deklaration in C++ sieht so aus:
extern "C" _declspec(dllexport) bool forwardFFTbool(double *out, double *dat, int x, int y, int z);

Das Einbinden der DLL in Delphi:
Delphi-Quellcode:
 forwardFFTbool:function(var outdat:PDouble;dat: TDim; x:Integer; y:Integer; z:Integer): boolean stdcall {$IFDEF WIN32} cdecl {$ENDIF};
  reverseFFTbool:function(var outdat:PDouble;dat: TDim; x:Integer; y:Integer; z:Integer): boolean stdcall {$IFDEF WIN32} cdecl {$ENDIF};
Die Methode in der alles berechnet wird lautet folgendermaßen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
   var g,gg,b:PDouble;//TDim;//PDouble; //PDinArray;
   res:Boolean;
   width, height, length,i,j,l,val,arlength,id:Integer;
   y:TDim;
   h1,h2:THandle;
   f:String;
begin
        width:= arrY;
        height:=arrX;
        length:=arrZ;
        arlength := height*length*width*SizeOf(Double)*2;
         h1:=GlobalAlloc(GHND,arlength);
         h2:=GlobalAlloc(GHND,arlength);
        g := GlobalLock(h1);
        b := GlobalLock(h2);

        res:= forwardFFTbool(g,arra,height,width,length);

       gg := @g;
       if res= true then begin
        SetLength(y,height*length*width*SizeOf(Double)*2);
        id := 0;
        for l:= 0 to length-1 do begin
           for i:=0 to Height-1 do begin
                for j:= 0 to Width -1 do begin
                     y[(height*width*l)+(i*Width +j)] := gg^;//g[(height*width*l)+(i*Width +j)];//g^;
                     Inc(gg);
                end;
           end;
        end;
      
        res := reverseFFTbool(b,y,height,width,length);

        if res= true then begin
        txtStatus.Text := 'RFFT Com ok!';
        txtStatus.Font.Color := clGreen;
        end else begin
          txtStatus.Text := 'RFFT Com not ok!';
          txtStatus.Font.Color := clRed;
        end;
        end else begin
          txtStatus.Text := 'RFFT Com not ok!';
          txtStatus.Font.Color := clRed;
        end;

        GlobalUnlock(h1);
        Globalfree(h1);
        GlobalUnlock(h2);
        Globalfree(h2);
end;
irgendwer eine Idee?
Danke im voraus
mfg
Stefan
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:04 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