AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ein COM+ Server ist gar nicht so einfach :-(
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von svehei · begonnen am 4. Aug 2003 · letzter Beitrag vom 5. Aug 2003
Antwort Antwort
Seite 1 von 2  1 2      
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
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 4. Aug 2003, 17:03
Wie hast Du Dein Interface deklariert? Hat es eine GUID?

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

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

  Alt 4. Aug 2003, 17:10
ja hat es
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 4. Aug 2003, 17:12
Zeig mal trotzdem die Deklaration und die Anbindung an die Klasse. Diese wichtigen Teile hast Du nicht gepostet...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

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

  Alt 4. Aug 2003, 17:19
du meinst die deklaration von meiner dll? die data-storage klasse ist da nicht mit drin

Delphi-Quellcode:
type
  TLMSServer = class(SAApplicationService, ILMSServer)
  private
  ...
    FDataStorage: TDataTorage;
  ...
  protected
  ...
  function Get_DataStorage(out Value: OleVariant): HResult; stdcall;
  function Set_DataStorage(var Value: OleVariant): HResult; stdcall;
    ...

  ...
  end;

wobei SAApplicationService von meinem AppServer vorgegeben wird, den ich benutzen muss.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 4. Aug 2003, 17:24
Mich interessiert eigentlich die Deklaration der Klasse, welche Du über das Interface nutzen möchtest. Einfaches Beispiel.
Delphi-Quellcode:
type
  IMyIntf = interface
    [GUID...]
    procedure Yeah; stdcall;
  end;

  TMyIntf = class(TTypedCOMObject, IMyIntf)
  protected
    procedure Yeah; stdcall;
  end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

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

  Alt 5. Aug 2003, 08:42
ah, vielleicht ist das mein fehler gewesen. die zusaetzliche data-storage klasse habe ich wie eine ganz normale klasse deklariert:

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;
diesse klasse habe ich nicht in der tlb deklariert. ich dachte ich kann auf die klasse einfach wie bei standard-applicationen zugreifen ?!?! liege ich da falsch?

meine prinzipielle vorgehensweise:

1)neue ActiveX-Library
2)dieser Library ein neues com-objekt hinzugefuegt
3)benoetigte methoden dem com-objekt/Interface hinzugefuegt
4)eine neue unit mit meiner DataStorage-Klasse (von TObject) abgeleitet
5)von meinem interface wie beschrieben versucht auf die DataStorage-Klasse zuzugreifen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 5. Aug 2003, 08:50
Zitat von svehei:
ich dachte ich kann auf die klasse einfach wie bei standard-applicationen zugreifen ?!?! liege ich da falsch?
Yep, da liegst Du falsch Delphi-Objekte können nicht einfach durch COM-Interfaces gestreamt werden. Theoretisch ist es wohl möglich, nur das Wie? Dann bleibt aber das Problem, daß man nur mit einem Client darauf zugreifen könnte der in genau derselben Delphi-Version (inkl. Update-Version) geschrieben ist, da sonst der identische Aufbau der Klassen-Verwaltung nicht garantiert ist.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
svehei

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

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

  Alt 5. Aug 2003, 08:57
was soviel bedeutet wie dass ich fuer meine data-storage-klasse auch ein interface definieren muss?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 5. Aug 2003, 09:36
Ja, und die Klasse solltest Du dann von TCOMObject anstatt von TObject ableiten.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz