Hoi,
nun, wie die Überschrift schon sagt, habe ich ein paar Fragen zu besonderen Datentypen in Verbindung mit DLLs.
Als erstes kommt der in Delphi bekannte VariantRecord, der sein Inhalt ändern kann, je nach dem Wert eines bestimmten Eintrags.
Die ganze Angelegnheit sieht so aus:
Delphi-Quellcode:
TKeyWord = record
Name : PChar;
CaseIntensiv : Boolean;
end;
TCharRange = record
Range : array of Char;
CaseIntensiv : Boolean;
end;
TParentheses = record
StartTag : PChar;
EndTag : PChar;
CaseIntensiv : Boolean;
end;
TToken = record
ID : Cardinal;
Prioiorty : Cardinal;
TokenType : TTokenType;
case TokenType : TTokenType of //hier ist der VariantTeil
ttKeyWord : ( Data : TKeyWord ); //Jenachdem wie TokenTyp steht
ttCharRange : ( Data : TCharRange ); //Wird der entsprechende Record
ttParentheses : ( Data : TParentheses ); //hinzu gefügt
end;
Frage, ist sowas alls
DLL Export/Import möglich, oder bestehen da schwierigkeiten in anderen Programmiersprachen?
Wenn ja, was gibt es für alternative Möglichkeiten.
Jetzt komm ich zu der Dynamischen Array. Gibt es eine Möglichkeit diese innerhalb der
DLL zu speichern, da ihre Elementanzahl, wie gesagt dynamisch ist.
Delphi-Quellcode:
TCharRange = record
Range : array of Char; //Hier können beliebig viele Chars enthalten sein.
CaseIntensiv : Boolean;
end;
Das Problem ist, wenn eine Programmfunktion, die diese Array übergabe, termieniert wird, wird auch das array aus dem speicher entfernt, daher suche ich nach einer Möglichkeit dieses Array in einen anderen Speicherbereich zu verschieben.
Das gleiche Problem besteht auch bei PChar/PAnsiChar , wenn hier die Funktion terminiert wird, wird auch deren speicherplatz gelöscht, daher auch die daten sind verloren und mein gespeicherter Pointer zeigt auf nichts.
Mfg
Desmu