moin,
gut, ich gebe dir mal meinen Code. Den C-Code habe ich nicht, aber laut Handbuch muß meine Funktion in Delphi folgendemaßen eingebunden werden:
Delphi-Quellcode:
function CPXaddrows(env:CPXEnvptr; LP: CPXLPptr;ccnt,rcnt,nzcnt:integer;
rhs,sense,rmatbeg,rmatind,rmatval,colname,rowname:
pointer):integer;stdcall; external cplex name 'CPXaddrows';
Jetzt geht es um die pointer colname und rowname. Die anderen funktionieren mit integer und double auf die identische Weise wie ich es mit colname und rowname mit char versucht habe.
Die Typen Definition ist folgendermaßen:
Delphi-Quellcode:
Tvarc= array[0..2] of char;
ptrTvarc=^Tvarc;
Die Variablen definiere ich folgendermaßen:
Delphi-Quellcode:
colname: ptrTvarc;
rowname: ptrTvarc;
Dann reserviere ich Speicher:
Delphi-Quellcode:
GetMem(rowname,3*SizeOf(Char));
GetMem(colname,3*SizeOf(Char));
Ich weise den Variablen die Werte zu:
Delphi-Quellcode:
colname[0]:='y';
colname[1]:='x';
colname[2]:='z';
rowname[0]:='a';
rowname[1]:='b';
rowname[2]:='c';
Die Funktion rufe ich dann folgendermaßen auf:
status:=CPXaddrows(env,lp,3,2,6,rhs,sense,rmatbeg,rmatind,rmatval,colname,rowname);
Und schleißlich gebr ich den Speicher wieder frei:
Delphi-Quellcode:
FreeMem(rowname,3*SizeOf(Char));
FreeMem(colname,3*SizeOf(Char));
Wenn ich es laufen lasse kommt dann die Felhermeldung:
Project P2.exe raised
exception class EAccessViolation with message '
Access violation at address 10108907 in module 'cplex65.dll' read of address 007A7879' Process stopped. Use Step orRun to continue.
Wenn ich bei den Variablen rowname und colname in der Funktion nil schreibe, läuft das Programm fehlerfrei.
Was mache ich falsch?
Danke!
Gruß
Kaddy
[edit=Delphi-Tags ergänzt. MfG Daniel B.[/edit]