Thema: Delphi Array übergabe an C-DLL

Einzelnen Beitrag anzeigen

Blizzard

Registriert seit: 4. Jan 2003
88 Beiträge
 
Delphi 6 Enterprise
 
#1

Array übergabe an C-DLL

  Alt 1. Sep 2005, 10:33
Hi Leute,
ich hab folgendes Problem:
Ich hab den Header einer C-DLL und dazu eine kleine beispiel anwendung in C. Ich hab jetzt versucht beide in Delphi umzusetzen und hab nun das Problem das ich nach dem aufruf der DLL funktion fehler an völlig "schwachsinnigen" stellen bekomme. Soll heißen das ich z.B. ne exception beim nächsten aufruf von Showmessage außerhalb der funktion die die dll aufruft bekomme. (kann auch ne andere funktion als showmessage sein).

Hier mal der C Header der funktion:
Code:
typedef unsigned char      BYTE;
int Service(BYTE n1, int* d,int n2);
und der beispiel Code:
Code:
{
   int RetVal=0,array[10],RetAnzahl;
   unsigned char RetBuffer[500];

   RetAnzahl=30;

   array[0]=ID;
   array[1]=VERSION;
   array[2]=(int)&RetAnzahl;
   array[3]=(int)&RetBuffer[0];
   array[4]=100;

   Service(UPLOAD,array,5);

   RetBuffer[RetAnzahl]=0;
   m_wndView.Add("Versionsnummer",RetBuffer);
}
und dann noch meine Umsetzung der Funktion:
Delphi-Quellcode:
Service: function(n1: BYTE; //Service ID
                         var d: array of integer; //Pointer auf Array
                         n2: Integer) //Array größe
                         : Integer cdecl stdcall;
und der aufruf:
Delphi-Quellcode:
var
    RetAnzahl: integer;
    arr: array [0..9] of Integer;
    RetBuffer: array [0..499] of Char;
begin
   RetAnzahl := 30;

   arr[0] := ID;
   arr[1] := VERSION;
   arr[2] := integer(@RetAnzahl);
   arr[3] := integer(@RetBuffer[0]);
   arr[4] := 500;

   Service(UPLOAD,arr,5);


   RetBuffer[RetAnzahl] := #0;

   result := copy(String(RetBuffer),1,RetAnzahl);
end;
(ID, VERSION und UPLOAD und integer constanten)

Jemand ne idee was ich falsch mache?
Ich vermute mal dass, ich obwohl ich den korrekten wert von der DLL zurückgeliefert bekomme, ein Pointer nicht stimmt und die dll mir deswegen in irgendwelche falschen speicherbereiche schreibt. Aber ich hab wirklich schon alles mögliche ausprobiert und bin jetzt mit meinem Latein absolut am ende .

Hoffe einer von den C/Delphi Gurus hier kann mir helfen.

mfg
Blizzard
  Mit Zitat antworten Zitat