Hallo zusammen...
Im Moment versuche ich mich an einem
dll, mit welchem ich auf einem DXS-Server bestimmte Tags(Variablen) auslesen oder erstellen kann.
Beim erstellen eines neuen Tags liefert es mir Anscheinend ein Objekt zurück, welches ich halten muss, da ansonsten die erstellte Variable wieder stirbt.
Das
DLL ist in etwa wie folgt aufgebaut:
DXSTAGSLib
->ITagsEvents(DispInterface)
->ITagEvents(DispInterface)
->Tags(CoClass)
->ITags(Interface)
-->Item(property)
-->CreateBool(method)
-->usw.
->Tag(CoClass)
->ITag(Interface)
-->Value(property lesen)
-->Value(property setzen)
Der Text, welcher hinter
CreateBool steht sieht so aus:
Delphi-Quellcode:
[
id(0x00000001),
helpstring("method CreateBool")
]
HRESULT _stdcall CreateBool([in] VARIANT tagName, [out, retval] VARIANT * pTag );
Dies ist der Code, welcher solch ein Tag mit dem Namen "DXSTest" erstellt. Das erstellte Tag verschwindet jedoch gleich wieder.
Delphi-Quellcode:
var
Form1: TForm1;
dxs: Variant;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
dxs := CreateOleObject('MicroInnovation.DXS.Tags');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
dxs.CreateBool('DXSTEST');
end;
Noch ein Kommentar vom Support, welche mir jedoch nicht ganz klar macht wie ich sowas in Delphi nun lösen kann.
Zitat:
Wenn du ein CreateBool machst, kriegst du ein Objekt zurück. Das Objekt "stirbt" aber gleich wieder wenn es nicht verwendet wird. Die Annahme ist nun, dass du das Objekt nicht hälst und dieses Bool objekt somit nur sehr kurzlebig sprich im monitor schon gar nicht sichtbar ist.
Wir haben ja da im Excel diese Collection von Objekten gemacht, die ständig existierte, also die Objekte hielt und somit diese im DXS angemeldet blieben.
Weitere Frage die aufgetaucht ist:
Die CoClass Tag ist kein direkt erzeugbares Objekt.
Wie greife ich auf solch eine CoClass zu?
Der Text, welcher hinter CoClass Tag steckt:
Delphi-Quellcode:
[
uuid(BE55C0E2-F111-4B5D-84BC-73DDCFFFE484),
helpstring("MicroInnovation.DXS.Tag Class"),
noncreatable
]
coclass Tag
{
[default] interface ITag;
[default, source] dispinterface _ITagEvents;
};
Vielen Dank für eure Hilfe.