Einzelnen Beitrag anzeigen

svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#1

Ein COM+ Server ist gar nicht so einfach :-(

  Alt 4. Aug 2003, 16:56
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
  Mit Zitat antworten Zitat