hallo zusammen,
ich haenge immer noch an meinem
COM-Server und bin wiedermal auf ein Problem gestossen, das mir schon wieder heftiges kopfzerbrechen mitbringt
hier nun mein problemchen:
wie erwaehnt baue ich gerade an einem
COM+ (InProc) Server. Nun habe ich eine methode mit der ich eine
xml-datei parse. da ich die gewonnenen informationen aus der
xml-datei aber in mehreren methoden, also oefters, benoetige moechte ich eine art data-storage-klasse implementieren, die durch ihre methoden und properties meine gewonnen informationen beschreibt. zusaetzlich hat meine klasse dann eine import-funktion, die anhand des filenames (der
xml-datei) diese dann parst und sich "selber fuellt".
mein problem ist nun, dass ich die klasse zwar wunderbar gefuellt und kompiliert bekomme, wenn ich aber von einer interface-methode auf properties der klasse zugreife ich den wert nicht zurueckbekomme (nicht an meine anwendung weitergeben kann) - warum auch immer.
hier nun die codebeispiele:
die "data-storage-klasse":
Delphi-Quellcode:
TDataStorage = class(TObject)
private
FValue: OleVariant;
protected
public
constructor create;
procedure Import(XMLFile : String);
procedure setValue(value: OleVariant);
function getValue: OleVariant;
property defaultValue: OleVariant read getValue write setValue;
end;
...
die implementierung der get/set-klassen sind standard.
im
com-objekt:
Delphi-Quellcode:
....
private //property fuer com
FDataStorage: TDataTorage;
protected
function Get_DataStorage(
out Value: OleVariant): HResult;
stdcall;
function Set_DataStorage(
var Value: OleVariant): HResult;
stdcall;
...
//in einer Interface-Methode rufe starte ich den import
FDataStorage := TDataStorage.create;
FDataStorage.Import(fileName);
Set_DataStorage(FDataStorage);
...
//in einer anderen InterfaceMethode auf das schon moechte ich auf das schon "importiert/gefuellte" Objekt zugreifen
if assigned(FDataStorage)
then
begin
retVal := FDataStorage.defaultValue;
//retVal ist der OUT-Parameter
end;
...
im prinzip wie bei ganz normalen klassenobjekten und deren properties. nur bei meinem inproc-server klappts nicht. an was koennte das liegen? hat da bitte jemand ne idee dazu?
vielen dank
sven