Das "andere" Programm ist die Entwicklungsumgebung "NATURAL Studio" der Programmiersprache NATURAL. Diese NATURAL-Programme bestehen aus Subroutinen(ähnlich Basic). Ich möchte nun in einem TreeView alle Subroutinen des aktuellen Programmes auflisten und mit Doppelklick wird an die entsprechende Sourcecodestelle positioniert.(ähnlich der Projektverwaltung oder Klassenstruktur der Delphi-
IDE).
Diese
IDE lässt sich per PlugIns erweitern. Diese PlugIns sind auch in NATURAL geschrieben und in dieser Sprache gibt es Dinge wie Speicher reservieren nicht. Ich bin froh, dass eine
DCOM-Schnittstelle gibt und ich Delphi rufen kann.
In diesem Plugin lege ich einen Treeview mit einem Dummy-Knoten an und übergebe das
Handle an Delphi. Dort kann ich mit
TreeView_DeleteAllItems(wnd);
diesen Knoten löschen. Das tut.
Also habe ich Zugriff auf das Treeview-Objekt, richtig? Sogar "schreibend".
Lege ich aber mittels
Delphi-Quellcode:
ZeroMemory(@tvi, sizeof(tvi));
tvi.hParent := nil;
tvi.hInsertAfter := TVI_FIRST;
tvi.item.mask := TVIF_TEXT ;
tvi.item.pszText := PChar(feNatname);
tvi.item.cchTextMax := SizeOf(PChar(feNatname));
root := TreeView_InsertItem(wnd, tvi);
ein Element an, sehe ich es zumindest nicht. (im Debugger ist root aber <> Nil) Liegt das nur am PChar oder hängt das neue Item gar nicht an meinem Tree?
Müsste ich meine erzeugten Knoten noch irgendwie in den anderen Prozess schieben?
Irgendwie so?
WriteProcessMemory(hProc, pAddr, @tvi, sizeof(TV_ITEM), dwTmp)