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